สำหรับผู้ที่ต้องการบริบทเพิ่มเติมเกี่ยวกับสาเหตุที่เกิดขึ้นนอกเหนือจากวิธีการแก้ไขแล้วอ่านด้านล่าง
ด้วยการแนะนำของ iOS 9 เพื่อปรับปรุงการรักษาความปลอดภัยของการเชื่อมต่อระหว่างแอปและเว็บบริการรักษาความปลอดภัยการเชื่อมต่อระหว่างแอปและบริการเว็บที่จะต้องปฏิบัติตามวิธีปฏิบัติที่ดีที่สุด พฤติกรรมการปฏิบัติที่ดีที่สุดนั้นบังคับใช้โดยApp Transport Securityเพื่อ:
- ป้องกันการเปิดเผยโดยไม่ตั้งใจและ
- จัดเตรียมพฤติกรรมเริ่มต้นที่ปลอดภัย
ตามที่อธิบายไว้ในApp Transport Security Technoteเมื่อสื่อสารกับบริการเว็บของคุณตอนนี้ App Transport Security มีข้อกำหนดและพฤติกรรมดังต่อไปนี้:
- เซิร์ฟเวอร์ต้องรองรับโปรโตคอล Transport Layer Security (TLS) อย่างน้อย 1.2 เวอร์ชัน
- ยันต์การเชื่อมต่อจะถูก จำกัด ไว้ที่สิ่งที่ให้ความลับไปข้างหน้า (ดูรายการของยันต์ด้านล่าง)
- ใบรับรองจะต้องลงนามโดยใช้อัลกอริทึมแฮชลายเซ็นที่ดีกว่าด้วยทั้งคีย์ 2048 บิตหรือมากกว่า RSA หรือคีย์ 256 บิตหรือมากกว่า Elliptic-Curve (ECC)
- ใบรับรองที่ไม่ถูกต้องส่งผลให้เกิดความล้มเหลวอย่างหนักและไม่มีการเชื่อมต่อ
กล่าวคือคำขอบริการเว็บของคุณควร: a.) ใช้HTTPSและ b.) เข้ารหัสโดยใช้ TLS v1.2 พร้อมกับส่งต่อความลับ
อย่างไรก็ตามดังที่ได้กล่าวไว้ในโพสต์อื่นคุณสามารถแทนที่พฤติกรรมใหม่นี้ได้จาก App Transport Security โดยการระบุโดเมนที่ไม่ปลอดภัยในInfo.plist
แอพของคุณ
เพื่อแทนที่คุณจะต้องเพิ่มNSAppTransportSecurity
> คุณสมบัติพจนานุกรมของคุณNSExceptionDomains
Info.plist
ถัดไปคุณจะเพิ่มโดเมนของบริการบนเว็บลงในNSExceptionDomains
พจนานุกรม
ตัวอย่างเช่นถ้าฉันต้องการหลีกเลี่ยงพฤติกรรมการขนส่งความปลอดภัยของแอปสำหรับบริการบนเว็บในโฮสต์www.yourwebservicehost.comฉันจะทำสิ่งต่อไปนี้:
เปิดแอปของคุณใน Xcode
ค้นหาInfo.plist
ไฟล์ใน Project Navigator และคลิกขวาที่ไฟล์แล้วเลือกตัวเลือกเมนูเปิดเป็น > รหัสที่มา ไฟล์รายการคุณสมบัติจะปรากฏในบานหน้าต่างด้านขวา
วางบล็อกคุณสมบัติต่อไปนี้ไว้ภายในพจนานุกรมคุณสมบัติหลัก (ใต้อันแรก<dict>
)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
NSExceptionDomains
หากคุณต้องการที่จะให้ข้อยกเว้นสำหรับโดเมนเพิ่มเติมแล้วคุณจะเพิ่มคุณสมบัติอื่นพจนานุกรมใต้
เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับกุญแจที่อ้างถึงข้างต้นโปรดอ่านtechnote ที่กล่าวถึงนี้