iOS - (kCFStreamErrorDomainSSL, -9813)

Я получаю (kCFStreamErrorDomainSSL, -9813) при подключении к клиентскому серверу.

Сервер клиента имеет самозаверяющий сертификат, который я не могу изменить. Приложение использует AFNetworking 3.x. Я попробовал следующее, но ничего не работает.

Если кто-то может мне помочь, это будет высоко ценится.

Info.plist:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
        <true/>

        <key>NSExceptionDomains</key>
        <dict>
            <key> *** CLIENT HOSTNAME *** </key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>

    </dict>

AFNetworking connection manager:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

#ifdef USE_SELF_SIGNED_CERT_RULES
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    manager.securityPolicy.allowInvalidCertificates = YES;
    manager.securityPolicy.validatesDomainName = YES;
#endif

1 ответ

Решение

У меня такая же проблема. Я попробовал ваше решение, но оно не сработало. Настройки allowInvalidCertificates, validatesDomainName и AFSSLPinningModeCertificate не решили мою проблему. После долгих поисков я увидел структуру AFSecurityPolicy этого класса.

В этом классе есть функция

- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
              forDomain:(nullable NSString *)domain;

Вы должны создать подкласс AFSecurityPolicy и вернуть YES в его реализации. Тогда вы сможете подключиться к вашему серверу.

Мой клиентский сервер также был самоподписанным.

Настройки свойств на AFSecurityPolicy не решают проблему, интересно почему.

Другие вопросы по тегам