Разрешить непроверенный сертификат ssl в UIWebview
Я внедряю веб-сайт в UIWebView. Во время разработки я указал на localhost. Проблема в том, что всякий раз, когда он попадает на URL-адрес "https://", он не загружается. Когда я загружаю URL-адрес в мобильном сафари, я получаю это всплывающее окно:
![enter image description here]()
Есть ли способ переопределить это с помощью UIWebView, чтобы разрешить непроверенный URL?
Ответы
Ответ 1
Ответ Ник не позволит вашему приложению принять Apple в App Store, а ответ Джордж не сможет загрузить оставшуюся часть страницы с .css или .js или любыми другими вторичными загрузками. Существует полный ответ здесь, который позволяет UIWebView загружать страницы с сайта с ненадежным сертификатом.
Ответ 2
Если это просто для тестирования во время разработки, вы можете создать категорию в NSURLRequest и переопределить следующий частный метод:
#if DEBUG
@implementation NSURLRequest (NSURLRequestWithIgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
#endif
Просто поместите это где-нибудь в один из ваших файлов .m(например, делегат приложения) или поместите в него собственный .m файл. Вам не нужен соответствующий файл заголовка.
#if DEBUG
является предосторожностью, чтобы предотвратить случайное отключение его при отправке в Apple, но если вам нужно, чтобы он работал в сборке релиза, удалите его (и убедитесь, что вы не забыли его восстановить или удалить перед тем, как отправить в Apple).
Ответ 3
В iOS 9, SSL-соединения будут терпеть неудачу для всех недействительных или самозаверяющих сертификатов. Это поведение по умолчанию новой функции App Transport Security в iOS 9.0 или новее, а также в OS X 10.11 и новее.
Вы можете переопределить это поведение в Info.plist
, установив NSAllowsArbitraryLoads
в YES
в словаре NSAppTransportSecurity
. Однако я рекомендую переопределить этот параметр только для целей тестирования.
![введите описание изображения здесь]()
Информацию см. в App Transport Technote здесь.
Ответ 4
Свифт 3/4 версии для Ник Локвуд ответ.
Это просто для целей тестирования/разработки:
extension NSURLRequest {
#if DEBUG
static func allowsAnyHTTPSCertificate(forHost host: String) -> Bool {
return true
}
#endif
}
Ответ 5
Используя следующие два метода, мы можем разрешить непроверенные ssl в UIWebview
-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
Я ответил подробно, как достичь этого здесь
Ответ 6
Есть способ сделать это юридически (по крайней мере, по законам App Store). Когда вы используете NSURLConnection, есть два метода, которые можно использовать для использования самоподписанных сертификатов SSL:
Как использовать NSURLConnection для подключения к SSL для ненадежного сертификата?
Если вы реализуете UIWebViewDelegate, используйте
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
Откажитесь от NO, чтобы WebView не загружался сам по себе. Затем создайте NSURLConnection (которое можно использовать с неподписанными сертификатами по вышеуказанной ссылке).
Конечно, здесь применяются обычные рекомендации SSL:
-Не используйте сертификат без знака на производственных серверах!
-Всегда выдается предупреждение, позволяющее вашему пользователю решить, принимать ли сертификат или нет.
Ответ 7
Я знаю его немного поздно, но он может помочь другим, я нашел статью, чтобы обойти ssl в приложении iOS. Все, что вам нужно сделать, это настроить свой веб-просмотр и сделать запрос на отправку с приложения на ваш сервер, и если вы получите ssl, что означает, что у вас нет действующего сертификата на вашем сервере. Чтобы обойти вас, вам нужно использовать веб-делегаты, которые
1.) Может проходить проверку на защиту
2.) Начать загрузку с запросом
3.) Получил ли вызов аутентификации
Вы можете скопировать эти функции из этого URL, для меня это работает очень хорошо. Надеюсь, что это поможет.