Obecnie próbuję połączyć się z serwerem za pomocą certyfikatu z podpisem własnym. Używam NSURLConnection do łączenia się z serwerem. Jak mogę się upewnić, że ufam tylko właściwemu serwerowi i anulować wszystkie inne połączenia? Używam następujący kodNie można ufać własnoręcznie podpisanemu certyfikatowi na iphone
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
SecTrustResultType results;
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
SecTrustEvaluate(trust, &results);
if (results == kSecTrustResultProceed || results == kSecTrustResultConfirm) {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
} else {
[challenge.sender cancelAuthenticationChallenge:challenge];
}
}
Obecnie SecTrustEvaluate
zawsze wraca z wynikiem równym kSecTrustResultRecoverableTrustFailure
. Zainstalowałem profil konfiguracyjny z certyfikatem na telefonie za pomocą narzędzia konfiguracyjnego iphone i jest oznaczony jako zweryfikowany, ale nie zmieniło wyników.
Czy ktoś może mi pomóc uzyskać wynik zaufania z kSecTrustResultProceed
lub kSecTrustResultConfirm
dla samopodpisanego certyfikatu?
Nicea wskazówka, to działa, jeśli są coraz ** kSecTrustResultRecoverableTrustFailure ** ... specjalnie klawisz „subjectAltName” jest bardzo ważny. Jeśli twoja odpowiedź serwera przez DNS, kiedy jest wywoływana, powinieneś użyć 'subjectAltName = DNS: example.com' lub jeśli chcesz mieć zarówno' subjectAltName = IP: 10.0.1.5, DNS: example.com'. Dzięki ! – gwdp