Nếu phụ trợ của bạn sử dụng kiến kết nối an toàn, bạn sẽ sử dụng NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
bạn cần kiểm tra cấu hình máy chủ của mình đặc biệt là để có phiên bản ATS và chứng chỉ SSL Thông tin:
Thay vì chỉ cho phép Kết nối không an toàn bằng cách cài đặt NSExceptionAllowsInsecureHTTPLoads = YES
, thay vào đó bạn cần Cho phép bảo mật bị hạ thấp trong trường hợp máy chủ của bạn không đáp ứng yêu cầu tối thiểu (v1.2) cho ATS (hoặc tốt hơn để khắc phục phía máy chủ).
Cho phép bảo mật hạ thấp xuống một máy chủ
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
sử dụng máy khách openssl để điều tra chứng chỉ và nhận cấu hình máy chủ của bạn bằng máy khách openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
.. tìm ở cuối
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)
App Transport Security (ATS) yêu cầu giao thức TLS (Transport Layer Security) phiên bản 1.2.
Yêu cầu kết nối bằng ATS:
Các yêu cầu đối với kết nối dịch vụ web để sử dụng App Transport Security (ATS) liên quan đến máy chủ, mật mã kết nối và chứng chỉ, như sau:
Chứng chỉ phải được ký bằng một trong các loại khóa sau:
Khóa thuật toán băm an toàn 2 (SHA-2) có độ dài tiêu hóa ít nhất 256 (nghĩa là SHA-256 trở lên)
Khóa mã hóa Elliptic-Curve (ECC) với kích thước tối thiểu 256 bit
Khóa Rivest-Shamir-Adeld (RSA) có độ dài ít nhất 2048 bit Một chứng chỉ không hợp lệ dẫn đến lỗi cứng và không có kết nối.
Các mật mã kết nối sau đây hỗ trợ bảo mật chuyển tiếp (FS) và hoạt động với 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
Cập nhật: hóa ra openssl chỉ cung cấp phiên bản giao thức tối thiểu Giao thức: Liên kết TLSv1