Невозможно доверять самоподписанному сертификату на iphone - PullRequest
7 голосов
/ 24 августа 2010

Я сейчас пытаюсь подключиться к серверу с самозаверяющим сертификатом. Я использую 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 Ответ

4 голосов
/ 02 ноября 2010

Вам необходимо убедиться, что ваш сертификат имеет определенные расширения. Я настроил сертификат со следующими расширениями, и он работал для меня (формат OpenSSL):

basicConstraints=critical,CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=IP:192.168.x.y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...