Мы разрабатываем приложение на основе ионных каркасов.При вызове API на основе HTTP он работает правильно, но при доступе к API на основе HTTP происходит сбой.
Вот подробности: - API работают на сервере Java Apache, проверяя сертификат для определенных адресов домена - Произошла ошибка с запросом: в противном случае он заканчивается блоком ошибок (Angular / ionic httpclient) с: err.Status: «0 ошибка» или
Ошибка: имя хоста / IP не совпадает с альтернативными именами сертификата: «IP: XXX.XXX.XXX.XX отсутствует всписок сертификата: "at Object.checkServerIdentity (tls.js: 199: 17) в TLSSocket.(_tls_wrap.js: 1098: 29) в emitNone (events.js: 86: 13) в TLSSocket.emit (events.js: 185: 7) в TLSSocket._finishInit (_tls_wrap.js: 610: 8) в TLSWrap.ssl.onhandshakedone (_tls_wrap.js: 440: 38)
Испытания. Мы можем получить доступ к одним и тем же API-интерфейсам с поддержкой HTTPS-сертификатов двумя способами (но только в браузере локальной машины, а не в сборках устройств)
- Если запущен Chrome в режиме --disable-web-security (изменение в плагине CORS)
- Если назначить ipaddress домену .companyname.com в файле hosts.Затем он был подтвержден сертификатом и может запускать приложение.
Поскольку эти два подхода могут быть реализованы на настольном компьютере, и мы не уверены, как мы можем использовать такой механизм обхода на стороне мобильного приложения.
Даже если он запрашивает у пользователя разрешение на обход сертификата, он также должен быть у нас в порядке.Но он должен подключаться к API и получать данные.
Испытания:
.Net Console App: тот же APIвызовите с помощью HttpWebRequest
в консольном приложении, которое работает правильно из-за кода: Код
private static bool AcceptAllCertifications(object sender,System.Security.Cryptography.X509Certificates.X509Certificate certification,System.Security.Cryptography.X509Certificates.X509Chain chain,System.Net.Security.SslPolicyErrors sslPolicyErrors) {
return true;
}
Приложение iOS Objective-C для iOS: Код здесь
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"myCompany" ofType:@"cer"];
NSData *myCertData = [NSData dataWithContentsOfFile:cerPath];
Я пытался вызвать метод http.setSSLPinning
, но он тоже не работает.
Как преодолеть эту ошибку при сборке мобильных приложений с использованием ionic framework или как включить HTTP-закрепление SSL?