我想通過NDK在C上的Android上創建最基本的x509公鑰證書文件。我構建了libcrypto和libssl(儘管我目前只使用libcrypto的東西)與https://github.com/guardianproject/openssl-android的東西。Openssl X509_set_pubkey()Android NDK中的崩潰
由於我有一些問題得到這個工作,我最終得到它在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的一個問題,我建,但似乎有點不太可能,任何想法發生了深刻的?
感謝