Cordova SSL pinning error 500: "Произошла ошибка с запросом"

Я пытаюсь сделать закрепление SSL с помощью Cordova 5.3.3 и Android с помощью следующего плагина: https://github.com/wymsee/cordova-HTTP

Когда я включаю закрепление с помощью следующей функции и выполняю GET, возникает ошибка 500: "Произошла ошибка с запросом". (Все тесты выполняются внутри устройства Android с помощью инспектора).

window.cordovaHTTP.enableSSLPinning(
    true,
    function(res) {console.log("SSL pinning: " + res)},
    function(err) {console.log("SSL pinning: " + err)}
);

window.cordovaHTTP.get(
    "https://95.85.12.4/test.json",
    {}, // optional params
    {}, // optional headers
    function(res) {console.log(res)},
    function(err) {console.log(err)}
);

Если я принимаю все сертификаты, все работает нормально из-за того, что я перекрываю конфигурацию пиннинга.

window.cordovaHTTP.enableSSLPinning(
    true,
    function(res) {console.log("SSL pinning: " + res)},
    function(err) {console.log("SSL pinning: " + err)}
);

window.cordovaHTTP.acceptAllCerts(
    true,
    function(res) {console.log('Accept all certs: ' + res)},
    function(err) {console.log('Accept all certs: ' + err)}
);

window.cordovaHTTP.get(
    "https://95.85.12.4/test.json",
    {}, // optional params
    {}, // optional headers
    function(res) {console.log(res)},
    function(err) {console.log(err)}
);

Я делаю эти тесты на моем сервере под управлением NGINX. https://95.85.12.4/test.json

Я внес в белый список все (только для целей тестирования)

<!-- Enable all requests, inline styles, and eval() -->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

Я также установил для переменной отладки в AndroidManifest.xml значение true.

<application android:debuggable="true">

Мой сертификат самозаверяющий с форматом DER и расширением.cer. Я проверил, что сертификат правильный с openssl. Если я установлю сертификат на своем компьютере, не будет проблем с открытием URL-адреса сервера в браузере.

Сертификаты находятся в папке / www / Certificates внутри моего проекта Cordova. Я также добавил.cer insinde / platform / android / assets.

Любая идея?

Спасибо!

1 ответ

Решение

Проблема не связана с форматом сертификата. Это из-за IP-адреса. Вам необходимо создать сертификат с SubjectAltName (SAN), как описано здесь, если вы не используете имя хоста для отправки запроса. Вы должны написать IP-адрес как alt_name. В противном случае вы получите сообщение об ошибке "Имя хоста xxx.xxx.xxx.xxx не подтверждено".

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