【问题标题】:TLS CA certificate SSL Pinning using SWIFT-NIO-SSL [closed]使用 SWIFT-NIO-SSL 的 TLS CA 证书 SSL 固定 [关闭]
【发布时间】:2020-07-17 19:09:01
【问题描述】:

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

在尝试了数字并尝试了不同的方法后,我找不到解决方案。是否有任何教程或任何帮助使用带有 swift-nio-ssl 的 ca 证书连接到 TLS 会有所帮助。

【问题讨论】:

    标签: swift ssl ca swift-nio


    【解决方案1】:

    我不能 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 来实现它,但实际上这可能很难,具体取决于您打算如何固定。

    如果您提供更多详细信息,您究竟想要实现什么,我很乐意对此进行一些扩展。

    【讨论】:

    • 谢谢。我有基于 GRPC 模块的服务器,我需要连接引导信任,以便快速调用微服务。我能够成功使用 GRPC 部分。我当前的问题场景是:CA 证书、服务器证书、私钥,我需要使用 TLS 从 iOS 连接服务器“xyz.com”以建立连接。我似乎无法使用所有证书来使用 swift NIO SSl 建立与服务器的连接。任何演示的示例代码都会有所帮助。提前致谢
    • @BlackPearl12 嗯,这听起来更像是您试图让 TLS 相互身份验证正常工作。今天绝对支持,在这里,我帮助某人使用 AsyncHTTPClient 实现了同样的目标:github.com/swift-server/async-http-client/issues/…。这就是你想要做的吗?
    • 谢谢。我做了一些研究,上面的 cmets 肯定帮助我找到了解决方案。
    • 我写了一篇关于 gRPC 与 iOS swift 集成的文章,用于使用 ca 证书进行 ssl pinning。这可能是其他陷入此问题的人:medium.com/@ambrose12silveira/…
    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多