Доверяйте самоподписанным сертификатам iOS 13 для WebSocket через TLS - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть приложение iOS, работающее на устройстве iOS 13.3 (iPhone XR), которое запускает локальный сервер веб-сокетов, прослушивающий 127.0.0.1:9002 внутри моего приложения с использованием транспортных служб Swift NIO.

У меня есть самозаверяющий сертификат, который я использую для настройки параметров TLS в Swift NIO. Этот сертификат соответствует требованиям, указанным Apple здесь: Требования к доверенным сертификатам в iOS 13 и macOS 10.15 . Root CA явно доверен на моем устройстве и отвечает также требованиям.

Внутри моего приложения я загружаю WKWebView, который отображает веб-сайт: https://www.websocket.org/echo.html.

Когда я пытаюсь подключиться к: wss: //127.0.0.1: 9002, я всегда получаю одну и ту же ошибку:

Ошибка сети WebSocket: Операция не может быть завершена. (Ошибка OSStatus -9807.)

Что в структуре безопасности означает:

errSSLXCertChainInvalid

Я хотел бы указать что все работает нормально, когда я пытаюсь выполнить те же действия без TLS.

Есть идеи, что я делаю не так с моими сертификатами? Я борюсь с этим с пару дней. Спасибо.

1 Ответ

0 голосов
/ 02 мая 2020

Я создал пакет для обработки сокетов, написанных на Obj- C для iOS, и он учитывает последние ограничения TLS, наложенные Apple (что является проблемой, с которой вы сталкиваетесь). Посетите страницу github для моего вспомогательного класса, там много полезной информации о том, как правильно создавать сертификаты с учетом новых ограничений. Если вы этого не сделаете, вы не сможете совершить рукопожатие.

https://github.com/eamonwhiter73/IOSObjCWebSockets/tree/master

Кроме того, конкретно - с вашей ошибкой, он признает, что сертификат «цепочка» (CA-> промежуточный CA-> сертификат сервера) недействителен. Любая часть этой цепочки может быть причиной проблемы, и если вы не используете промежуточный центр сертификации для подписи сертификата сервера, это также может не сработать - я никогда не проверял на этом этапе.

...