Подтвердить что ты не робот

Разрешить непроверенный сертификат ssl в UIWebview

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

enter image description here

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

4b9b3361

Ответ 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, для меня это работает очень хорошо. Надеюсь, что это поможет.