2014-10-22 4 views
5

Hier ist der Code, den ich um das Zertifikat zu ermöglichen, verwenden:WKWebView https Zertifikat ungültig

@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 

Und ich initialisieren meine WKWebView wie folgt aus:

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]; 

Es funktioniert gut für http Website, aber ich habe diese Fehler unter Verwendung von https:

Das Zertifikat für diesen Server ist ungültig. Sie könnten sich mit einen Server verbinden, der vorgibt, "mysite.com" zu sein, der Ihre vertraulichen Informationen gefährden könnte.

Es funktionierte, als ich UIWebView wurde mit und die Funktion „canAuthenticateAgainstProtectionSpace“, die Umsetzung aber jetzt verstehe ich nicht, was ich zu tun haben.

Fehle ich etwas oder WKWebView kann nicht mit HTTPS umgehen?

+0

Haben Sie dieses Problem gelöst? – David

+0

Um ehrlich zu sein bin ich wieder auf ein klassisches UIWebView umgestiegen und es funktioniert einwandfrei, ich habe das neue WKWebView seit ... Sorry. – Pull

+0

Hat jemand die Lösung dafür? Ich stecke gerade in derselben Ausgabe in WKWebView fest. In UIWebview mit der universellen API "allsTyTTPSCertificateForHost" funktionierte es gut, in WKWebView funktionierte es jedoch nicht. – harshit2811

Antwort

5

versuchen diese, für mich gearbeitet

- (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]); 
} 

Und vergessen Sie nicht hinzufügen zum Info.plist

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