【问题标题】:Trust self-signed certificates on iOS 13 for WebSocket over TLS信任 iOS 13 上基于 TLS 的 WebSocket 的自签名证书
【发布时间】:2020-06-02 09:13:25
【问题描述】:

我有一个在 iOS 13.3 设备 (iPhone XR) 上运行的 iOS 应用程序,它使用 Swift NIO 传输服务启动本地 websocket 服务器,在我的应用程序内监听 127.0.0.1:9002。

我有一个自签名证书,用于在 Swift NIO 中设置 TLS 选项。此证书符合 Apple 在此处指定的要求:Requirements for trusted certificates in iOS 13 and macOS 10.15。根 CA 在我的设备上受到明确信任,并且也符合要求。

在我的应用程序中,我加载了一个显示网站的 WKWebView:https://www.websocket.org/echo.html

当我尝试连接到:wss://127.0.0.1:9002 时,我总是遇到同样的错误:

WebSocket 网络错误:操作无法完成。 (OSStatus 错误 -9807。)

在安全框架中代表什么:

errSSLXCertChainInvalid

我想指出,当我在没有 TLS 的情况下尝试相同的步骤时,一切正常。

知道我的证书做错了什么吗?几天以来,我一直在为此苦苦挣扎。 谢谢。

编辑:我找到了问题的原因,我忘记在服务器端添加完整正确的证书链,因此客户端无法正确验证服务器的身份,因为我有只有服务器证书,而不是整个证书链,包括中间证书和根 CA。

【问题讨论】:

  • 能否添加读取CA证书和连接服务器的代码?
  • 问题解决了吗?我也有类似情况
  • 我做了,我忘了编辑我的问题,我要做什么。问题很简单。事实上,我忘记在服务器端添加完整正确的证书链,因此客户端无法正确验证服务器的身份......

标签: ios swift ssl websocket tls1.2


【解决方案1】:

我创建了一个包来处理用 Obj-C 为 iOS 编写的套接字,它考虑了 Apple 施加的最新 TLS 限制(这是您遇到的问题)。查看我的助手类的 github 页面,有很多关于如何在新的限制下正确创建证书的好信息。否则,您将无法握手。

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

另外,特别是 - 由于您的错误,它认识到证书“链”(CA->中间 CA->服务器证书)无效。该链的任何部分都可能导致问题,如果您没有使用中间 CA 来签署服务器证书,它也可能无法正常工作 - 我从未真正测试过这一点。

【讨论】:

  • 感谢您的评论,我会调查一下!
  • Np 让我知道!
  • 重新阅读您的错误我可能能够提供额外的见解,“链”是错误所指的,我认为“链”证书中只有 CA 证书和中间证书,所以你的问题可能首先是其中一个,但我不确定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多