Интеграция 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