Openssl X509_set_pubkey () Сбой в Android NDK - PullRequest
2 голосов
/ 17 августа 2011

Я пытаюсь сделать самый простой файл сертификата открытого ключа x509 на Android в C через NDK.Я собрал libcrypto и libssl (хотя в настоящее время я использую только libcrypto) с материалами из https://github.com/guardianproject/openssl-android.

Поскольку у меня возникли некоторые проблемы с тем, чтобы заставить это работать, я закончил работать в 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

КогдаЯ запускаю тот же код в NDK на Android, что получаю вызов X509_set_pubkey (x509, evp) (определяется отладкой распечатки) без каких-либо ошибок openssl, о которых сообщает ERR_get_error (), а затем получаю сигнал 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, который я построил, но это кажется несколько маловероятным, какие-либо мысли?

Спасибо

1 Ответ

0 голосов
/ 02 апреля 2012

Возможно, вам нужно вызвать OpenSSL_add_all_algorithms () перед использованием функций RSA.

...