Đối với những người bạn muốn có thêm một bối cảnh về lý do tại sao điều này xảy ra, ngoài cách khắc phục nó, hãy đọc bên dưới.
Với sự ra mắt của iOS 9, để cải thiện tính bảo mật của các kết nối giữa ứng dụng và dịch vụ web, các kết nối an toàn giữa ứng dụng và dịch vụ web phải tuân theo các thực tiễn tốt nhất . Hành vi thực hành tốt nhất được thi hành bởi App Transport Security để:
- ngăn chặn tiết lộ tình cờ, và
- cung cấp một hành vi mặc định là an toàn.
Như đã giải thích trong Công nghệ bảo mật vận chuyển ứng dụng , khi liên lạc với dịch vụ web của bạn, App Transport Security hiện có các yêu cầu và hành vi sau:
- Máy chủ phải hỗ trợ ít nhất phiên bản giao thức TLS (Transport Layer Security) phiên bản 1.2.
- Mật mã kết nối được giới hạn ở những mật mã cung cấp bảo mật chuyển tiếp (xem danh sách các mật mã bên dưới.)
- Chứng chỉ phải được ký bằng thuật toán băm chữ ký SHA256 hoặc tốt hơn, với khóa RSA 2048 bit hoặc lớn hơn hoặc khóa Elliptic-Curve (ECC) 256 bit hoặc lớn hơn.
- Chứng chỉ không hợp lệ dẫn đến lỗi cứng và không có kết nối.
Nói cách khác, yêu cầu dịch vụ web của bạn nên: a.) Sử dụng HTTPS và b.) Được mã hóa bằng TLS v1.2 với tính bảo mật chuyển tiếp.
Tuy nhiên, như đã được đề cập trong các bài đăng khác, bạn có thể ghi đè hành vi mới này từ App Transport Security bằng cách chỉ định miền không an toàn trong Info.plist
ứng dụng của bạn.
Để ghi đè, bạn sẽ cần thêm các thuộc tính NSAppTransportSecurity
> NSExceptionDomains
từ điển vào Info.plist
. Tiếp theo, bạn sẽ thêm tên miền của dịch vụ web vào NSExceptionDomains
từ điển.
Ví dụ: nếu tôi muốn bỏ qua hành vi Bảo mật vận chuyển ứng dụng cho một dịch vụ web trên máy chủ www.yourwebservicehost.com thì tôi sẽ làm như sau:
Mở ứng dụng của bạn trong Xcode.
Tìm Info.plist
tệp trong Project Navigator và "chuột phải" nhấp vào tệp đó và chọn tùy chọn menu Mở dưới dạng > Mã nguồn . Tệp danh sách tài sản sẽ xuất hiện trong khung bên phải.
Đặt khối thuộc tính sau bên trong từ điển thuộc tính chính (bên dưới đầu tiên <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>
Nếu bạn cần cung cấp ngoại lệ cho các tên miền bổ sung thì bạn sẽ thêm một thuộc tính từ điển khác bên dưới NSExceptionDomains
.
Để tìm hiểu thêm về các khóa được tham chiếu ở trên, hãy đọc kỹ thuật này đã được đề cập .