【发布时间】:2020-07-17 19:09:01
【问题描述】:
我一直在尝试使用SWIFT-NIO-SSL,使用 CA 证书和服务器证书连接到服务器。
在尝试了数字并尝试了不同的方法后,我找不到解决方案。是否有任何教程或任何帮助使用带有 swift-nio-ssl 的 ca 证书连接到 TLS 会有所帮助。
【问题讨论】:
我一直在尝试使用SWIFT-NIO-SSL,使用 CA 证书和服务器证书连接到服务器。
在尝试了数字并尝试了不同的方法后,我找不到解决方案。是否有任何教程或任何帮助使用带有 swift-nio-ssl 的 ca 证书连接到 TLS 会有所帮助。
【问题讨论】:
我不能 100% 确定这是否是您所要求的,但您是否尝试使用自定义 CA 连接到服务器,您可能需要以下 TLSConfiguraion:
var tlsConfiguration = TLSConfiguration.forClient()
tlsConfiguration.trustRoots = .file("/tmp/the-ca.pem") // the CA
如果您想验证服务器提供的证书链,您应该在创建您放入管道的NIOSSLClientHandler 时使用NIOSSLClientHandler(context:serverHostname:customVerificationCallback:)。最后一个参数是NIOSSLCustomVerificationCallbackack,它允许完全覆盖 BoringSSL 的证书验证逻辑,它会呈现远程对等方提供的整个证书链。
(如果您不直接使用 NIO,而是通过 Vapor 或 AsyncHTTPClient 等其他库,上述内容不一定有任何意义,因为您自己没有添加 NIOSSLClientHandler。)
此时,仅使用TLSConfiguration 不允许您实施证书固定。理论上,您可以使用 NIOSSLCustomVerificationCallbackack 来实现它,但实际上这可能很难,具体取决于您打算如何固定。
如果您提供更多详细信息,您究竟想要实现什么,我很乐意对此进行一些扩展。
【讨论】: