如果您的后端使用安全的连接蚂蚁,则可以使用NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
您需要检查服务器配置,尤其是要获取ATS版本和SSL证书信息:
不只是 允许安全连接的设置NSExceptionAllowsInsecureHTTPLoads = YES
,而不是你需要允许较低的安全的情况下,您的服务器不符合要求的最小(V1.2)的ATS(或更好地修复服务器端)。
允许降低单个服务器的安全性
<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连接的要求:
Web服务连接使用App Transport Security(ATS)的要求涉及服务器,连接密码和证书,如下所示:
证书必须使用以下其中一种密钥进行签名:
摘要长度至少为256(即SHA-256或更大)的安全哈希算法2(SHA-2)密钥
椭圆曲线密码术(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仅提供最低协议版本Protocol:TLSv1 链接