2016-04-20 3 views
1

У меня есть следующая проблема:Как проверить подлинность UIWebView с сертификатом клиента?

У меня есть UIWebView, который нагружает сайт правильно, но сервер хочет аутентификации от клиента (UIWebView) тоже. Я добавил ssl certificate с помощью следующего кода я получил от другого сайта:

shouldStartLoadWithRequest:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType (UIWebViewNavigationType)navigationType; 
{ 
    if(![self authenticated]) 
    { 
     [self setAuthenticated:NO]; 
     [self setUrlConnection:[[NSURLConnection alloc] initWithRequest:[self requestObj] delegate:self]]; 
     [[self urlConnection] start]; 
     return NO; 
    } 
    return YES; 
} 

didReceiveAuthenticationChallenge:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([challenge previousFailureCount] == 0) 
    { 
     [self setAuthenticated:YES]; 
     NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; 
     [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; 
    } 
    else [[challenge sender] cancelAuthenticationChallenge:challenge]; 
} 

didReceiveResponse:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 
{ 
    [self setAuthenticated:YES]; 
    [[self webView] loadRequest:[self requestObj]]; 
    [[self urlConnection] cancel]; 
} 

canAuthenticateAgainstProtectionSpace:

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
{ 
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 
} 

Теперь сервер требуется аутентификации от клиента (сертификат) с определенным DN именем. Я нашел iOS Client Certificates and Mobile Device Management, но код мне не помог и не решил мою проблему.

Можно ли добавить файл PKCS12 в мой UIWebView, так что если сервер хочет получить аутентификацию от клиента, то UIWebView покажет ему этот файл?

Я всегда получаю ошибку

2016-04-20 12:20:50.880 App [469:126255] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) 
2016-04-20 12:20:51.454 App [469:126252] CFNetwork SSLHandshake failed (-9824 -> -9829) 
2016-04-20 12:20:51.456 App [469:126252] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9829) 
+0

вы проверить в симуляторе? – BHASKAR

+0

@BHASKAR Нет. Я тестировал на своем тестовом устройстве. Должен ли я тестировать его на симуляторе? – Premox

ответ

0

Используйте этот кусок кода

-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 

if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
{ 
    NSURL* baseURL = [NSURL URLWithString:SERVER_IP]; 
    if ([challenge.protectionSpace.host isEqualToString:baseURL.host]) 
    { 
     NSLog(@"trusting connection to host %@", challenge.protectionSpace.host); 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
    } 
    else 
    { 
     NSLog(@"Not trusting connection to host %@", challenge.protectionSpace.host); 
    } 
} 

    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
} 

И добавить этот класс в верхний из текущего класса

@interface NSURLRequest(AllowAllCerts) 

@end 


@implementation NSURLRequest(AllowAllCerts) 

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 

return YES; 

} 
@end 
+0

Я добавил свой первый метод в свой 'ViewController', но у меня нет' UpperClass'. У меня только класс «AppDelegate» и еще один, но ни один из них не является UpperClass. Должен ли я создать некоторый 'UpperClass' для моего' ViewController'? – Premox

+0

не высший класс. добавьте это перед вашей реализацией. – BHASKAR

+0

Всегда получайте те же ошибки и после добавления кода я получаю вывод 2016-04-20 14: 04: 18.690 Приложение [553: 149129] доверяющее подключение к узлу www.example.de – Premox

Смежные вопросы