백엔드가 보안 연결 개미를 사용하는 경우 NSURLSession을 사용합니다.
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
특히 ATS 버전 및 SSL 인증서 정보를 얻으려면 서버 구성을 확인해야합니다.
대신의 안전하지 않은 연결 허용 설정에 의해을 NSExceptionAllowsInsecureHTTPLoads = YES
, 대신 당신은 할 필요가 보안을 낮춘 허용 하는 경우 귀하의 ATS에 대한 최소 요구 사항 (1.2)을 만족하지 않는 서버 (또는 더 나은 수정 서버 측에)에서.
단일 서버에 대한 보안 저하 허용
<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 (App Transport Security)에는 TLS (Transport Layer Security) 프로토콜 버전 1.2가 필요합니다.
ATS를 사용하여 연결하기위한 요구 사항 :
ATS (App Transport Security)를 사용하기위한 웹 서비스 연결 요구 사항에는 다음과 같이 서버, 연결 암호 및 인증서가 포함됩니다.
인증서는 다음 유형의 키 중 하나로 서명해야합니다.
다이제스트 길이가 최소 256 (SHA-256 이상) 인 보안 해시 알고리즘 2 (SHA-2) 키
최소 256 비트 크기의 ECC (Elliptic-Curve Cryptography) 키
길이가 2048 비트 이상인 RSA (Rivest-Shamir-Adleman) 키 인증서가 유효하지 않으면 하드 오류가 발생하고 연결되지 않습니다.
다음 연결 암호는 FS (Forward Secrecy)를 지원하고 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 링크