如果您的后端使用安全连接蚂蚁,您可以使用 NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
您需要检查您的服务器配置,尤其是获取 ATS 版本和 SSL 证书信息:
如果您的服务器不满足 ATS 的最低要求 (v1.2)(或更好地修复服务器端) ,您不仅需要通过设置允许不安全连接NSExceptionAllowsInsecureHTTPLoads = YES
,还需要允许降低安全性。
允许降低单个服务器的安全性
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
使用 openssl 客户端调查证书并使用 openssl 客户端获取您的服务器配置:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
..在最后找到
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: //
Session-ID-ctx:
Master-Key: //
Key-Arg : None
Start Time: 1449693038
Timeout : 300 (sec)
Verify return code: 0 (ok)
应用传输安全 (ATS) 需要传输层安全 (TLS) 协议版本 1.2。
使用 ATS 连接的要求:
使用 App Transport Security (ATS) 的 Web 服务连接要求涉及服务器、连接密码和证书,如下所示:
证书必须使用以下类型的密钥之一进行签名:
安全散列算法 2 (SHA-2) 密钥,摘要长度至少为 256(即 SHA-256 或更大)
椭圆曲线加密 (ECC) 密钥,大小至少为 256 位
长度至少为 2048 位的 Rivest-Shamir-Adleman (RSA) 密钥 无效证书会导致硬故障且无连接。
以下连接密码支持前向保密 (FS) 并与 ATS 一起使用:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
更新:原来 openssl 只提供最小协议版本协议:TLSv1 链接