Инструменты страницы

Добавление собственного сертификата для всего приложения на iOS

Архив для скачивания: wkwebview_.zip

Для возможности открытия Web View с сертификатами Минцифры, чтобы сохранить работоспособность сервисов sberbank.ru, вам необходима доработка в своем проекте webView:

  • установить публичный сертификат НУЦ Минцифры в качестве доверенного в коде вашего приложения

Перед тем как приступить к доработке Web View необходима конфигурация в основном файле Info.plist проекта.

Есть возможность самостоятельно управлять настройками сетевого соединения, посредством конфигурации App Transport Security Settings в основном файле Info.plist проекта. Необходимо добавить данную конфигурацию в Info.plist файл с ключом Allows Arbitrary Loads и значением YES (Скрин 1):

Скрин 1


Установка ключа AllowsArbitraryLoads со значением YES означает, что система не будет запрещать приложению взаимодействовать с любыми доменами по протоколу HTTP.

Важно! iOS 10.0 и более старшие версии:

ATS игнорирует установленное значение NSAllowsArbitraryLoads, если какой-либо из следующих ключей присутствует в конфигурации App Transport Security Settings:

NSAllowsArbitraryLoadsForMedia
NSAllowsArbitraryLoadsInWebContent
NSAllowsLocalNetworking

Более подробно о NSAllowsArbitraryLoads.

Также важный момент с AllowsArbitraryLoads является прохождение ревью в AppStore. В документе NSAllowsArbitraryLoads указано уточнение, что если выставить значение YES, необходимо будет обоснование на ревью.

Пример:

  • Обоснованием может являться то, что у вас используются самоподписанные сертификаты на серверах и можно добавить, что проводите валидацию по запинненым сертификатам в приложении, тем самым обеспечиваете безопасное соединение.

По факту данное обоснование Apple не всегда спрашивают (даже скорее не спрашивают).

Для примера как провести в webView установку публичного сертификат НУЦ Минцифры в качестве доверенного в коде вашего приложения был создан проект WKWebView, который включает сущности, используемый в нашем приложении МП СБОЛ.

Скрин 2


Настоятельно рекомендуется использовать URLRequest без модификации у запроса переменной cachePolicy (рекомендуем не отключать кэш, оставить дефолтное значение .useProtocolCachePolicy неизменным), пример с инициализацией URLRequest(url: url) (Скрин 2).

P.S. На данный момент, к сожалению, нет точного ответа по какой причине не проходит валидация сертификатов при модификации cachePolicy у запроса.

Для удобства и избыточности все основные пояснения изложены в комментариях к коду в проекте WKWebView. Здесь приводится (Скрин 3) метод делегата WKNavigationDelegate webView didReceive challenge, перед этим определив navigationdelegate у webview. Также был скачан и предустановлен в проект сертификат Минцифры (преобразован с раширением .der).

Скрин 3


Скачать действующие сертификаты Минцифры можно с сайта госуслуг https://www.gosuslugi.ru/crt в разделе «Сертификаты для MacOS».

Пример с сертификатом Russian Trusted Root CA:

После загрузки экспортировать из связки ключей в любую удобную папку (Скрин 4).

Скрин 4


Изменить расширение на .der (Скрин 5) и добавить его в папку Certificates.

Расширение .der необходимо для парсинга сертификата Xcode’ом и корректного отображение информации о сертификаты в нем (Скрин 6).

Скрин 5

Скрин 6


Сам проект лучше всего проверять на реальном устройстве (см. Архив).