Swift中使用TLS的NWConnection失败

时间:2018-11-12 01:43:39

标签: ios swift ssl wss network.framework

我能够使用tls这样连接到公共wss:

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 websocket,但出现一些错误。这是我的代码:

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:error:1000007d:SSL例程:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED:/BuildRoot/Library/Caches/com_appleSingsls2.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 :(得分:1)

解决方案是在服务器上安装我拥有的证书,然后在“设置”>“常规”>“关于”>“证书信任设置”中启用对该证书的完全信任