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 не подтверждено".