2014-10-22 3 views
5

Вот код, я использую, чтобы сертификат:WKWebView HTTPS сертификат недействителен

@interface NSURLRequest(DummyInterface) 
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host; 
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host; 
@end 
@implementation NSURLRequest(DummyInterface) 
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 
    return [host isEqualToString:@"mysite.com"]; 
} 
@end 

И я инициализировать мой WKWebView так:

NSURL *urlReq = [NSURL URLWithString:@"mysite.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:urlReq]; 
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[urlReq host]]; 

WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init]; 
mainWebView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration]; 
[mainWebView setNavigationDelegate:self]; 
[mainWebView loadRequest:request]; 

Он отлично работает на веб-сайт HTTP, но у меня есть это ошибка с использованием https:

Неверный сертификат для этого сервера. Возможно, вы подключаетесь к серверам, которые притворяются «mysite.com», которые могут подвергать вашу конфиденциальную информацию риску.

Он работал, когда я использовал UIWebView и реализовал функцию «canAuthenticateAgainstProtectionSpace», но теперь я не понимаю, что мне нужно делать.

Я что-то упустил или WKWebView не может обрабатывать HTTPS?

+0

Вы решили эту проблему? – David

+0

Чтобы быть откровенным, я переключился на классический UIWebView, и он отлично работает, я не пробовал новый WKWebView с тех пор ... Извините. – Pull

+0

Кто-нибудь получил решение для этого? Я застрял в этой же проблеме в WKWebView. Работа в режиме UIWebview с использованием allowAnyHTTPSCertificateForHost Private API, но в WKWebView не работает. – harshit2811

ответ

5

Попробуйте это, работал для меня

- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { 
    NSLog(@"Allowing all"); 
    SecTrustRef serverTrust = challenge.protectionSpace.serverTrust; 
    CFDataRef exceptions = SecTrustCopyExceptions (serverTrust); 
    SecTrustSetExceptions (serverTrust, exceptions); 
    CFRelease (exceptions); 
    completionHandler (NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:serverTrust]); 
} 

И не забудьте добавить к Info.plist

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict>