Разрешить непроверенный SSL-сертификат в UIWebview - PullRequest
25 голосов
/ 14 января 2012

Я встраиваю веб-сайт в UIWebView.Во время разработки я указал на localhost.Проблема заключается в том, что всякий раз, когда он достигает "https://" URL-адреса, он не загружается. Когда я загружаю URL-адрес в мобильном сафари, я получаю следующее всплывающее окно:

enter image description here

Есть лиспособ переопределить это с помощью UIWebView, чтобы разрешить непроверенный URL?

Ответы [ 7 ]

59 голосов
/ 14 января 2012

Если это только для тестирования во время разработки, вы можете создать категорию в NSURLRequest и переопределить следующий приватный метод:

#if DEBUG

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}

@end

#endif

Просто поместите это где-нибудь в один из ваших файлов .m (например, делегат приложения) или поместите в отдельный файл .m. Вам не нужен соответствующий заголовочный файл.

#if DEBUG - это мера предосторожности, предотвращающая случайное оставление его включенным при отправке в Apple, но если вам нужно, чтобы он работал в сборке релиза, удалите ее (и убедитесь, что вы не забыли восстановить или удалить ее). категория перед отправкой в ​​Apple).

9 голосов
/ 27 октября 2016

Swift 3/4 для ответа Ника Локвуда.

Это только для целей тестирования / разработки:

extension NSURLRequest {
    #if DEBUG
    static func allowsAnyHTTPSCertificate(forHost host: String) -> Bool {
        return true
    }
    #endif
}
8 голосов
/ 24 августа 2015

В iOS 9 SSL-соединения не будут работать для всех недействительных или самозаверяющих сертификатов.Это поведение по умолчанию новой функции App Transport Security в iOS 9.0 или более поздней версии, а также в OS X 10.11 и более поздних версиях.

Вы можете переопределить это поведение в Info.plist, выполнивустановка NSAllowsArbitraryLoads в YES в словаре NSAppTransportSecurity. Однако я рекомендую переопределить этот параметр только для целей тестирования.

enter image description here

Для получения дополнительной информации см. App Transport Technote здесь .

8 голосов
/ 25 февраля 2013

Ответ Ника не позволит Apple принять ваше приложение в App Store, а ответ Джорджа не сможет загрузить оставшуюся часть страницы с файлами .css или .js или другими дополнительными загрузками.Здесь есть полный ответ здесь , который позволяет UIWebView загружать страницы с сайта с ненадежным сертификатом.

3 голосов
/ 26 декабря 2013

Используя два нижеприведенных метода, мы можем разрешить непроверенный ssl в UIWebview

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

Я подробно ответил, как этого добиться здесь

2 голосов
/ 04 мая 2012

Есть способ сделать это легально (по крайней мере, по законам App Store). Когда вы используете NSURLConnection, для разрешения использования самозаверяющих сертификатов SSL можно использовать 2 метода:

Как использовать NSURLConnection для соединения с SSL для ненадежного сертификата?

Если вы реализуете UIWebViewDelegate, используйте

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

Верните NO, чтобы WebView не загружался сам по себе. Затем создайте NSURLConnection (который можно использовать с неподписанными сертификатами по вышеуказанной ссылке).

Конечно, здесь применяются обычные рекомендации SSL:
-Не используйте неподписанный сертификат на производственных серверах!
-Всегда появляется предупреждение, позволяющее вашему пользователю решить, принимать сертификат или нет.

0 голосов
/ 26 февраля 2016

Я знаю, что немного поздно, но это может помочь другим, я нашел статью, чтобы обойти ssl в приложении для iOS, все, что вам нужно сделать, это настроить веб-просмотр и сделать запрос из приложения на ваш сервер, и если вы получитеОшибка ssl, которая означает, что у вас нет действительного сертификата на вашем сервере. Чтобы обойти, вы должны использовать метадоны делегатов веб-просмотра, которые равны 1.) Может аутентифицироваться в пространстве защиты 2.) Должна начинаться загрузка с запроса 3.) Была ли получена проверка подлинностиВы можете скопировать эти функции с этого URL , для меня это работает довольно хорошо.Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...