使用 SWIFT-NIO-SSL 的 TLS CA 证书 SSL 固定

TLS CA certificate SSL Pinning using SWIFT-NIO-SSL

我一直在尝试使用 SWIFT-NIO-SSL,使用 CA 证书和服务器证书连接到服务器。

经过多次尝试,尝试了不同的方法,我无法得到解决方案。使用 ca 证书和 swift-nio-ssl 连接到 TLS 是否有任何教程或帮助会有所帮助。

我不是 100% 确定这是否是您要问的,但您是否尝试使用自定义 CA 连接到服务器,您可能需要以下内容 TLSConfiguraion:

var tlsConfiguration = TLSConfiguration.forClient()
tlsConfiguration.trustRoots = .file("/tmp/the-ca.pem") // the CA

如果你想验证服务器提供的证书链,你应该使用NIOSSLClientHandler(context:serverHostname:customVerificationCallback:) when creating the NIOSSLClientHandler that you put in your pipeline. The last argument is a NIOSSLCustomVerificationCallbackack,它允许完全覆盖 BoringSSL 的证书验证逻辑,它会呈现远程对等方提供的整个证书链。

(以防万一你不直接使用 NIO,而是通过另一个库,如 Vapor 或 AsyncHTTPClient,上面的内容不一定有任何意义,因为你没有自己添加 NIOSSLClientHandler。)

此时,仅使用 TLSConfiguration 并不能实现证书固定。理论上您可以使用 NIOSSLCustomVerificationCallbackack 实现它,但在实践中这可能很难,具体取决于您计划固定的准确程度。

如果您提供更多详细信息,我很乐意对此进行一些扩展。