Невозможно доверять самоподписанному сертификату на iphone
В настоящее время я пытаюсь подключиться к серверу с самозаверяющим сертификатом. Я использую NSURLConnection для подключения к серверу. Как я могу быть уверен, что доверяю только нужному серверу и отменяю все остальные подключения? Я использую следующий код
- (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];
}
}
В настоящее время SecTrustEvaluate
всегда возвращается с результатами, равными kSecTrustResultRecoverableTrustFailure
, Я установил профиль конфигурации с сертификатом на телефон с помощью утилиты настройки iphone, и он помечен как проверенный, но результаты не изменились.
Может ли кто-нибудь помочь мне получить результат доверия либо kSecTrustResultProceed
или же kSecTrustResultConfirm
для самоподписанного сертификата?
1 ответ
Вам нужно убедиться, что ваш сертификат имеет определенные расширения. Я настроил сертификат со следующими расширениями, и он работал для меня (формат OpenSSL):
basicConstraints=critical,CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=IP:192.168.x.y