Android NDK中的Openssl X509_set_pubkey()崩溃
我正试图通过NDK使最基本的x509公钥证书文件在Android C上成为可能。我用来自的东西构建了libcrypto和libssl(尽管我目前只使用libcrypto的东西) 因为我在让它工作时遇到了一些问题,所以我最终让它在linux中工作,在那里我有一个更愉快的调试设置。我在linux机器上使用的代码如下:Android NDK中的Openssl X509_set_pubkey()崩溃,android,c,java-native-interface,openssl,android-ndk,Android,C,Java Native Interface,Openssl,Android Ndk,我正试图通过NDK使最基本的x509公钥证书文件在Android C上成为可能。我用来自的东西构建了libcrypto和libssl(尽管我目前只使用libcrypto的东西) 因为我在让它工作时遇到了一些问题,所以我最终让它在linux中工作,在那里我有一个更愉快的调试设置。我在linux机器上使用的代码如下: void x509(RSA *rsa_keys) { EVP_PKEY *evp = EVP_PKEY_new(); X509 *x509 = X50
void x509(RSA *rsa_keys) {
EVP_PKEY *evp = EVP_PKEY_new();
X509 *x509 = X509_new();
EVP_PKEY_assign_RSA(evp, rsa_keys);
X509_gmtime_adj(X509_get_notBefore(x509),0);
X509_gmtime_adj(X509_get_notAfter(x509), (long) 60*60*24*365);
X509_set_pubkey(x509, evp);
unsigned char *out = NULL;
int length = i2d_X509(x509, &out);
FILE *x509_file = fopen("cert.cer", "w");
fwrite(out, 1, length, x509_file);
}
这段代码运行良好,并写出一个文件,该文件由openssl使用
openssl x509 -inform DER -text -in cert.cer
当我在Android上的NDK中运行相同的代码时,我得到了X509_set_pubkey(X509,evp)调用(由打印输出调试确定),没有任何由ERR_get_error()报告的openssl错误,然后得到一个带有大堆栈跟踪的信号11(SIGSEGV),代码1(SEGV_映射器)
从堆栈跟踪中唯一看起来非常有用的是崩溃发生在libcrypto.so的深处
08-17 01:40:41.261: INFO/DEBUG(10354): #00 pc 00041d1a /system/lib/libcrypto.so
08-17 01:40:41.261: INFO/DEBUG(10354): #01 pc 000357c6 /system/lib/libcrypto.so
08-17 01:40:41.261: INFO/DEBUG(10354): #02 pc 000337ba /system/lib/libcrypto.so
08-17 01:40:41.261: INFO/DEBUG(10354): #03 pc 000338c8 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #04 pc 000339e6 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #05 pc 00033f00 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #06 pc 00033b20 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #07 pc 00033f44 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #08 pc 00033f9c /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #09 pc 000770e6 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #10 pc 00076fec /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #11 pc 00036b68 /system/lib/libcrypto.so
08-17 01:40:41.268: INFO/DEBUG(10354): #12 pc 0007ed1a /system/lib/libcrypto.so
我能想到的唯一一件事是,我构建的Openssl存在问题,但这似乎不太可能,有什么想法吗
谢谢在使用RSA函数之前,您可能需要调用OpenSSL\u add\u all\u algorithms()。在使用RSA函数之前,您可能需要调用OpenSSL\u add\u all\u algorithms()