2011-12-19 6 views
0

Я использую код, который выполняет базовую HTTP-аутентификацию, см. Ниже. Это отлично работает в IOS 5. Но теперь мы изменили протокол на https, и мы использовали поддельный, самоподписанный сертификат. Это также сработало! Это кажется небезопасным. Кто-нибудь знает, если вам нужно что-то сделать в этом методе, чтобы предотвратить принятие определенных сертификатов?предотвращение самоподписанных сертификатов ssl в ios5

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

if ([challenge previousFailureCount] <= maxRetryCount) { 
    NSURLCredential *newCredential = 
    [NSURLCredential 
    credentialWithUser: userName 
    password:password 
    persistence:NSURLCredentialPersistenceForSession]; 

    [[challenge sender] 
    useCredential:newCredential 
    forAuthenticationChallenge:challenge]; 

    } 
    else 
    { 
    NSLog(@"Failure count %d",[challenge previousFailureCount]); 
    } 
} 

ответ

1

Похоже, я нашел ответ сам. Это блокирует недействительные сертификаты. По-прежнему необходимо проверить, работает ли он при входе в систему с действительным сертификатом.

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

    if ([[[challenge protectionSpace] authenticationMethod] isEqualToString:@"NSURLAuthenticationMethodServerTrust"]) { 
     [[challenge sender] performDefaultHandlingForAuthenticationChallenge:challenge]; 
    } 
    else { 
     if ([challenge previousFailureCount] <= maxRetryCount) { 
     NSURLCredential *newCredential = 
     [NSURLCredential 
     credentialWithUser: userName 
     password:password 
     persistence:NSURLCredentialPersistenceForSession]; 

     [[challenge sender] 
     useCredential:newCredential 
     forAuthenticationChallenge:challenge]; 

     } 
     else 
     { 
     NSLog(@"Failure count %d",[challenge previousFailureCount]); 
     } 
    } 
} 
+2

Обратите внимание, что существует правильная константа 'NSURLAuthenticationMethodServerTrust', которую вы должны использовать вместо этого –

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