Для тих із вас, хто хоче більше контексту щодо того, чому це відбувається, крім того, як це виправити, прочитайте нижче.
З впровадженням iOS 9 для підвищення безпеки зв’язків між додатком та веб-службами безпечне з'єднання між додатком та його веб-службою повинно дотримуватися кращих практик . Засоби безпеки транспорту додатків застосовуються до:
- запобігання випадкового розкриття та
- забезпечити безпечну поведінку за замовчуванням.
Як пояснено в Технотеці безпеки транспорту додатків , під час спілкування з веб-службою App Transport Security тепер має такі вимоги та поведінку:
- Сервер повинен підтримувати принаймні протокол протоколу безпеки транспортного рівня (TLS) версії 1.2.
- Шифри підключення обмежені тими, що забезпечують секретність вперед (див. Перелік шифрів нижче.)
- Сертифікати повинні бути підписані за допомогою SHA256 або кращого алгоритму хешування підпису, або 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
файл у «Навігаторі проектів» та клацніть на ньому «правою мишкою» та оберіть опцію меню « Відкрити як > вихідний код ». Файл списку властивостей з’явиться на правій панелі.
Поставте наступний блок властивостей всередині словника основних властивостей (під першим <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
.
Щоб дізнатися більше про ключі, на які посилалося вище, прочитайте цю вже згадану технологію .