连接到客户端服务器时出现错误消息(kCFStreamErrorDomainSSL,-9813)。

客户端的服务器具有我无法更改的自签名证书。该应用程序正在使用AFNetworking3.x。我尝试了以下方法,但似乎无济于事。

如果有人可以帮助我,将不胜感激。

信息清单:

<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

最佳答案

我有同样的问题。我尝试了您的解决方案,但没有成功。设置allowInvalidCertificates,validatesDomainName和AFSSLPinningModeCertificate不能解决我的问题。经过大量的搜索之后,我看到了此类的AFSecurityPolicy的结构。

这个课有一个功能

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


您必须将AFSecurityPolicy子类化,并在其实现中返回YES。然后,您将能够连接到服务器。

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

AFSecurityPolicy的设置属性无法解决问题,我想知道为什么。

关于objective-c - iOS-(kCFStreamErrorDomainSSL,-9813),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38719075/

10-11 05:57