Интеграция CyaSSL с текущим ядром Android (KitKat)

Мне нужно использовать CyaSSL на Android для проекта, над которым я работаю. Я без особого успеха пытался следовать инструкциям CyaSSL, чтобы встроить его в ядро. Основная проблема заключается в том, что структура сборки значительно изменилась с версии Android, для которой были написаны инструкции, до текущей версии.

Я перечислю шаги и связанные с ними проблемы.

1) Скопируйте каталог "cyassl" из "src/external/cyassl" провайдера в каталог "/external" платформы Android. Эта папка должна теперь находиться по адресу: /external/cyassl

Этот шаг в порядке.

2) Откройте /build/core/prelink-linux-map.map и добавьте новую запись для libcyassl.so под заголовком "# библиотеки для определенных приложений или временные библиотеки". Это должно выглядеть примерно так: ibcyassl.so

Этот шаг кажется ненужным с последними версиями Android, так как предварительная ссылка была удалена.

3) Откройте файл /dalvik/libnativehelper/Android.mk и добавьте libcyassl.so в список shared_libraries.

Этот файл выглядит перемещенным. Я нашел правильный файл в WORKING_DIRECTORY/libnativehelper/Android.mk и отредактировал его соответствующим образом.

4) Скопируйте каталог "yassl" из "src/libcore/yassl" источника провайдера в каталог "/libcore" платформы Android. Эта папка должна теперь находиться по адресу: /libcore/yassl

Здесь нет проблем.

5) Метод инициализации провайдера SSL должен быть зарегистрирован на платформе Android. Откройте файл /dalvik/libnativehelper/Register.c. Добавьте метод "register_com_yassl_xnet_provider_jsse_NativeCrypto" под записью для существующего поставщика. Когда добавлено, это должно выглядеть следующим образом:

if (register_org_apache_harmony_xnet_provider_jsse_NativeCrypto(env) != 0)
    goto bail;
if (register_com_yassl_xnet_provider_jsse_NativeCrypto(env) != 0)
    goto bail;

Этот файл Register.c не существует, и я понятия не имею, что делать с шагом 5.

6) Метод инициализации провайдера также необходимо добавить в файл заголовка по адресу /dalvik/libnativehelper/include/nativehelper/AndroidSystemNatives.h. Добавьте следующую декларацию метода в этот файл под декларацией для существующего поставщика SSL. Когда добавлено, это должно выглядеть следующим образом:

int register_org_apache_harmony_xnet_provider_jsse_NativeCrypto(JNIEnv *env);
int register_com_yassl_xnet_provider_jsee_NativeCrypto(JNIEnv *env);

Этот файл AndroidSystemNatives.h также, похоже, не существует, поэтому, опять же, не уверен, что здесь делать.

7) Откройте файл "security.properties" (находится по адресу /libcore/securit/src/main/java/java/security/security.properties). Внесите следующие изменения, чтобы настроить поставщика CyaSSL:

а) Добавьте следующую строку в список поставщиков. Эта строка должна быть над поставщиком по умолчанию "org.apache.harmony.xnet.provider.jsse.JSSEProvider". Обратите внимание на номера рядом с каждым поставщиком. Может потребоваться изменить нумерацию этого списка после добавления нового поставщика.

"security.provider.3=com.yassl.xnet.provider.jsse.JSSEProvider"

б) Измените запись "ssl.SocketFactory.provider" на новый поставщик CyaSSL. После внесения изменений оно должно выглядеть следующим образом:

 "ssl.SocketFactory.provider=com.yassl.xnet.provider.jsse.SocketFactoryImpl"

Этот файл теперь находится в /libcore/luni/src/main/java/java/security, который я соответственно отредактировал. Тем не менее, он не будет построен из-за пропущенных шагов, которые я не знаю, как обрабатывать. Я провел немало поисков и не нашел ничего полезного. Мои варианты, кажется, на данный момент -

1) Получите вышеупомянутую работу.

2) Вернитесь к созданию более старой версии Android (и всех связанных с этим проблем, связанных с понижением Java, Gcc, pyhton и т. Д.)

3) Найдите способ использовать библиотеку CyaSSL Android, не вставляя ее в ядро ​​(я не уверен, возможно ли это)

Любой совет или направление будет высоко ценится.

1 ответ

Решение

В качестве альтернативы у нас есть JNI Wrapper, который значительно облегчит вам задачу и должен безупречно работать с Android. Гораздо легче получить работу, чем то, что вы пытаетесь сделать. Я не уверен, что это вариант для вас?

В любом случае, вы можете получить наш JNI здесь: http://wolfssl.com/yaSSL/Products-wolfssljni.html

А так как вам нужно будет собрать и установить CyaSSL, чтобы использовать JNI, вы можете получить это здесь: http://wolfssl.com/yaSSL/Products-cyassl.html

Инструкции по настройке и работе можно найти, следуя этому руководству: http://wolfssl.com/yaSSL/Docs-wolfssl-jni-manual.html

Если это вариант для вас, я настоятельно рекомендую изучить его. Вскоре в магазине Google Play появится Android-клиент Android, использующий JNI, который я указывал выше.

Изменить: Для примера того, что я перечислил выше, вы можете скачать наш SSL-клиент, который использует наш wolfSSL JNI. https://play.google.com/store/apps/details?id=com.wolfssl.client

Другие вопросы по тегам