【问题标题】:Openssl X509_set_pubkey() Crash in Android NDKAndroid NDK 中的 Openssl X509_set_pubkey() 崩溃
【发布时间】:2011-08-17 09:46:55
【问题描述】:

我正在尝试通过 NDK 在 C 中的 Android 上制作最基本的 x509 公钥证书文件。我用来自https://github.com/guardianproject/openssl-android 的东西构建了 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_MAPPER) 有一个大堆栈跟踪

从堆栈跟踪中唯一看起来非常有用的是崩溃发生在 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 存在问题,但这似乎不太可能,有什么想法吗?

谢谢

【问题讨论】:

    标签: android c java-native-interface openssl android-ndk


    【解决方案1】:

    您可能需要在使用 RSA 函数之前调用 OpenSSL_add_all_algorithms()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多