หากแบ็กเอนด์ของคุณใช้การเชื่อมต่อที่ปลอดภัยคุณจะได้รับการใช้ NSURLS
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)
App Transport Security (ATS) ต้องการโปรโตคอล Transport Layer Security (TLS) เวอร์ชัน 1.2
ข้อกำหนดสำหรับการเชื่อมต่อโดยใช้ ATS:
ข้อกำหนดสำหรับการเชื่อมต่อบริการเว็บเพื่อใช้ App Transport Security (ATS) เกี่ยวข้องกับเซิร์ฟเวอร์รหัสการเชื่อมต่อและใบรับรองดังต่อไปนี้:
ใบรับรองต้องลงนามด้วยหนึ่งในประเภทของคีย์ต่อไปนี้:
Secure Hash Algorithm 2 (SHA-2) คีย์ที่มีความยาวสรุปอย่างน้อย 256 (นั่นคือ SHA-256 หรือสูงกว่า)
คีย์รูปไข่เข้ารหัสลับ (ECC) ที่มีขนาดอย่างน้อย 256 บิต
คีย์ Rivest-Shamir-Adleman (RSA) ที่มีความยาวอย่างน้อย 2048 บิตใบรับรองที่ไม่ถูกต้องส่งผลให้เกิดความล้มเหลวอย่างหนักและไม่มีการเชื่อมต่อ
ciphers การเชื่อมต่อต่อไปนี้สนับสนุน forward Secrecy (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 การเชื่อมโยง