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 не решают проблему, интересно почему.