Сбой соединения NW с использованием TLS в Swift - PullRequest
0 голосов
/ 12 ноября 2018

Мне удалось подключиться к общедоступному wss с помощью tls, например:

let port = 443
let url = URL(string: "wss://echo.websocket.org")!
connection = NWConnection(host: NWEndpoint.Host.name(url.host!, nil), port: NWEndpoint.Port(rawValue: UInt16(port))!, using: .tls)

Теперь я пытаюсь подключиться к веб-сокету wss в частной сети и получаю некоторые ошибки. Это мой код:

let port = 8443
let url = URL(string: "wss://ip_address:8443/gs-guide-websocket/websocket")!
connection = NWConnection(host: NWEndpoint.Host.name(url.host!, nil), port: NWEndpoint.Port(rawValue: UInt16(port))!, using: .tls)

И это ошибки:

[BoringSSL] boringssl_context_alert_callback_handler (3747) [C1.1: 1] [0x7fe945708390] Уровень оповещения: неустранимый, описание: сертификат неизвестен
[BoringSSL] boringssl_context_error_print (3699) boringssl CTX 0x600001ec9500: 140639868076392: ошибка: 1000007d: SSL подпрограммы: OPENSSL_internal: CERTIFICATE_VERIFY_FAILED: /BuildRoot/Library/Caches/com.apple.xbs/Sources/boringssl_Sim/boringssl-109.202.1/ ssl / handshake.cc: 372:
[BoringSSL] boringssl_context_get_error_code (3519) [C1.1: 1] [0x7fe945708390] SSL_AD_CERTIFICATE_UNKNOWN

Ошибка клиента: -9808: необязательно (неверный формат сертификата)

Нужно ли добавлять специальные параметры для подключения здесь?

Кроме того, я увидел, что wss работает, потому что я могу соединиться с SocketRocket, но я хочу соединиться с NWConnection

Спасибо.

1 Ответ

0 голосов
/ 15 ноября 2018

Решением было установить сертификат, который у меня был на сервере, а затем включить полное доверие к этому сертификату в меню «Настройки»> «Основные»> «О программе»> «Параметры доверия сертификату»

...