バックエンドが安全な接続Antを使用している場合は、NSURLSessionを使用します。
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
特にATSバージョンとSSL証明書情報を取得するには、サーバー構成を確認する必要があります。
を設定して安全でない接続を許可するだけNSExceptionAllowsInsecureHTTPLoads = YES
でなく、サーバーがATSの最小要件(v1.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)
App Transport Security(ATS)には、Transport Layer Security(TLS)プロトコルバージョン1.2が必要です。
ATSを使用して接続するための要件:
App Transport Security(ATS)を使用するためのWebサービス接続の要件には、サーバー、接続暗号、および証明書が含まれます。
証明書は、次のタイプの鍵のいずれかで署名されている必要があります。
ダイジェスト長が256以上のセキュアハッシュアルゴリズム2(SHA-2)キー(つまり、SHA-256以上)
サイズが256ビット以上の楕円曲線暗号(ECC)鍵
長さが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 リンク