iOS - (kCFStreamErrorDomainSSL, -9813)

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 连接管理器:

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

我遇到了同样的问题。我尝试了您的解决方案,但没有奏效。设置 allowInvalidCertificatesvalidatesDomainNameAFSSLPinningModeCertificate 没有解决我的问题。经过大量谷歌搜索后,我看到了 AFSecurityPolicy 这个 class.

的结构

这个里面有一个函数class

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

您必须在其实施中子class AFSecurityPolicy 和 return YES。然后你就可以连接到你的服务器了。

我的客户端服务器也是自签名的。

AFSecurityPolicy 上的设置属性没有解决问题,我想知道为什么。