Android NDK中的Openssl X509_set_pubkey()崩溃

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

我正试图通过NDK使最基本的x509公钥证书文件在Android C上成为可能。我用来自的东西构建了libcrypto和libssl(尽管我目前只使用libcrypto的东西)

因为我在让它工作时遇到了一些问题,所以我最终让它在linux中工作,在那里我有一个更愉快的调试设置。我在linux机器上使用的代码如下:

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()