Tag: openssl

与java相比,c中的openssl摘要不同

以下是代码,它是DigitalSigning Handler的一部分 final String NAMESPACEURI_WSSECURITY_WSU= “http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd”; final String NAMESPACEURI_WSSECURITY_WSSE = “http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext- 1.0.xsd”; final String NAMESPACEURI_XMLSIGNATURE_DS = “http://www.w3.org/2000/09/xmldsig#”; final String ATTRIBUTENAME_X509TOKEN = “http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile -1.0#X509v3”; final String ENCODINGTYPE_BASE64 = “http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message- security-1.0#Base64Binary”; SOAPHeaderElement securityElement = header .addHeaderElement(new QName( NAMESPACEURI_WSSECURITY_WSSE, “Security”, “wsse”)); //securityElement.setMustUnderstand(true); securityElement.addNamespaceDeclaration(“wsu”, NAMESPACEURI_WSSECURITY_WSU); securityElement.addNamespaceDeclaration(“ds”, NAMESPACEURI_XMLSIGNATURE_DS); SOAPBody body = envelope.getBody(); String bodyIdRef = “Id-1-BD-1”; body.addAttribute(new QName(NAMESPACEURI_WSSECURITY_WSU, “Id”, “wsu”), […]

bio_do_connect()返回-1

我正在尝试编写如下图所示的服务器/客户端应用程序。 issueTicket.cgi是一个用C编写的可执行文件。我的同事设置了apache并编写了issueTicket.cgi,我可以通过输入http:// [ubuntuIP] /cgi-bin/SEC_IssueTicket.cgi来访问issueTicket.cgi我的浏览器。 问题出在客户方面。 我必须使用Openssl在Windows上编写一个askTicket.exe,并且BIO_do_connect()始终返回-1。 以下是我的代码。 SSL_load_error_strings(); ERR_load_BIO_strings(); SSL_library_init(); /* Return value is always 1 */ OpenSSL_add_all_algorithms(); … *sslCtx = SSL_CTX_new(TLSv1_1_client_method()); sslRet = SSL_CTX_load_verify_locations(*sslCtx, (const char *)certpath, NULL); *sbio = BIO_new_ssl_connect(*sslCtx); BIO_set_conn_hostname(*sbio, “[ubuntuIP]:80/cgi-bin/issueTicket.cgi”); BIO_set_nbio(*sbio, 1); BIO_get_ssl(*sbio, &ssl); SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); BIO_do_connect(*sbio) // always return -1 任何人都可以告诉我的问题在哪里?

堆腐败 – Android原生代码中的SEGV_MAPERR

我正在尝试为流AES加密创建一个小型库,我开始基于Facebook Conceal项目( https://github.com/facebook/conceal )开展我的工作,只是更改了一些内容并改进了本机的包装以支持密码用填充物。 它工作正常,它可以解密文件没有问题,但是当我处理大流时,我得到随机的堆内存损坏,经过大量的时间调试,我一直无法找到错误。 这是我的代码: https://gist.github.com/frisco82/9782725 我试图找到内存分配或免费问题,但几乎没有malloc或free,而jni调用应该是安全的,openssl也是如此(我编译了自己但隐藏提供的也失败了) CheckJni没有任何警告,虽然上下文处理有点开箱即用,但它看起来并没有破坏(事实上Android的密码似乎使用了类似的东西)。 此外,如果有人可以指向我的Android本机AES多步骤(多个更新调用)库,我将切换到那个并忘记这一点。 错误时常变化,但通常与他的相似: 03-26 10:33:02.065: A/dalvikvm(2475): @@@ ABORTING: DALVIK: HEAP MEMORY CORRUPTION IN mspace_malloc addr=0x0 03-26 10:33:02.065: A/libc(2475): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 2494 (AsyncTask #1) 03-26 10:33:02.205: I/DEBUG(933): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** […]

RSA加密的OpenSSL可变长度结果

我正在尝试使用OpenSSL的RSA加密function加密一些文本。 我的主要问题是加密的RSA文本的长度在0到256之间变化。 我的RSA加密function是: /* Encrypt data using RSA */ char* rsa_encrypt(char* pub_key_filename, const unsigned char *data) { int padding = RSA_PKCS1_PADDING; FILE *fp_pub; fp_pub = fopen(pub_key_filename, “rb”); if (fp_pub == NULL) { printf(“There was an error opening the public key file. Exiting!\n”); exit(EXIT_FAILURE); } RSA *pub_key = PEM_read_RSA_PUBKEY(fp_pub, NULL, NULL, NULL); char *encrypted = malloc(2048); […]

从OpenSSL-1.0.1r中删除OPENSSL_cleanse

我发现OPENSSL_cleanse在我的项目中浪费了很多时间。 例如,如果它运行25秒,则OPENSSL_cleanse会浪费3秒 。 我检查了这个函数的代码,并确定它没有对我做任何非常有用的事情。 我知道它出于安全原因用垃圾数据填充内存,但我并不真正关心它。 所以我决定return; 就在此函数的任何操作开始之前。 void OPENSSL_cleanse(void *ptr, size_t len) { return; // original OpenSSL code goes here } 我正在使用Mac OS和Xcode。 我编译了lib并通过Configure脚本的–openssldir选项将其安装在/Users/ForceBru/Desktop/openssl 。 我已经在Build Settings->Link Binary With Libraries中将它添加到我的项目中,并在Build Settings->Search Paths->Header Search Paths和Build Settings->Search Paths->Library Search Paths添加了dirs。 该项目编译得很好,但时间分析器仍显示对OPENSSL_cleanse相当昂贵的调用。 编辑: C标签是因为OpenSSL是用C++编写的,而C++标签是因为我的代码是用C ++编写的。 也许这些信息会有所帮助。 问题是,我做错了什么? 如何删除对OPENSSL_cleanse的调用? 我认为这与链接有关,因为命令行包含-lcrypto ,这意味着这个库实际上可以从任何地方获取(对吗?),而不一定来自/Users/ForceBru/Desktop/openssl 。 编辑#2:我编辑了链接器选项以使用/Users/ForceBru/Desktop/openssl的.a文件,并将其从Build Settings->Link Binary With Libraries删除。 仍然没有效果。

使用c / c ++发送和validationSSL证书

我实际上正致力于协议安全性。 我需要发送证书并在另一侧validation。 现在这就是我的计划: 1像普通数据流一样发送证书链 2.在另一侧捕获它并将其存储在char []缓冲区中 现在,如何从此char []缓冲区validation证书并提取所需的参数? 我需要用c / c ++。

Android NDK OpenSSL错误交叉编译

我是NDK的新手,我正在按照本指南为Android构建OpenSSL,我正在使用Windows 7和Cygwin。 我在尝试构建OpenSSL库时遇到了错误。 # From the ‘root’ directory $ . ./setenv-android.sh $ cd openssl-1.0.1g/ $ perl -pi -e ‘s/install: all install_docs install_sw/install: install_docs install_sw/g’ Makefile.org $ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine –openssldir=/usr/local/ssl/$ANDROID_API $ make depend $ make all 当我尝试make depend命令时,我有2个错误: cryptlib.c:171:3: error: #error “Inconsistency between crypto.h and cryptlib.c” # error “Inconsistency between crypto.h […]

使用OpenSSL内存BIO以正确的方式写入和读取以null结尾的字符串

如果您执行以下示例(几乎完全基于官方https://www.openssl.org/docs/man1.0.2/crypto/BIO_s_mem.html#EXAMPLE ): #include #include int main() { BIO *mem = BIO_new(BIO_s_mem()); BIO_puts(mem, “Hello World\n”); BUF_MEM *bptr; BIO_get_mem_ptr(mem, &bptr); BIO_set_close(mem, BIO_NOCLOSE); /* So BIO_free() leaves BUF_MEM alone */ BIO_free(mem); printf(“%s”, bptr->data); BUF_MEM_free(bptr); return 0; } 它可能会按预期工作,这取决于在\n之后的底层内存缓冲区中的未初始化char是偶然的概率,这可以通过Valgrind报告确认: ==17122== Conditional jump or move depends on uninitialised value(s) ==17122== at 0x52CCCC0: vfprintf (vfprintf.c:1632) ==17122== by 0x52D3898: printf (printf.c:33) ==17122== […]

在高山图像上构建lua-openssl时未定义引用“strerror_s”

我正试图像lua-openssl一样建立一个开放式的高山图像 FROM openresty/openresty:alpine-fat # Set the version ENV RESTY_CONFIG_OPTIONS_MORE “–with-ngx_http_ssl_module” EXPOSE 80 EXPOSE 443 RUN ls /usr/local/openresty/nginx/logs COPY lualib /usr/local/openresty/nginx/lualib RUN chown -R nobody:root /usr/local/openresty/nginx/lualib RUN apk add –update \ openssl openssl-dev \ lua5.3 luajit-dev lua-socket \ git RUN git clone https://github.com/zhaozg/lua-openssl.git /usr/local/lua-openssl; \ cd /usr/local/lua-openssl; \ git checkout e923252b28cff43add6382853cc85ed888c4474b; \ make 但我得到下面的那个和很多这样的错误: /usr/local/lua-openssl/deps/lua-compat/c-api/compat-5.3.c:74:对strerror_s’ ./libopenssl.a(cms.o): […]

澄清OpenSSL中的EVP_BytesToKey()函数

我在看这个页面: http : //www.openssl.org/docs/crypto/EVP_BytesToKey.html 在那里,它说: 如果总密钥和IV长度小于摘要长度并且使用MD5,则推导算法与PKCS#5 v1.5兼容,否则使用非标准扩展来导出额外数据。 我正在使用AES-256-CBC密码和MD5。 从上面的摘录判断,这告诉我什么? 这是否意味着我与PKCS#5 v1.5兼容,或者它是否意味着它使用了一些非标准的东西?