CNIOBoringSSLShims 2.19.0

CNIOBoringSSLShims 2.19.0

由以下人员维护:George BarnettJohannes WeissCory BenfieldDaniel AlmPeter AdamsJake PrickettDavid Evans



  • Apple Inc.

SwiftNIO SSL

SwiftNIO SSL 是一个 Swift 包,包含基于 BoringSSL 的 TLS 实现。这个包允许 SwiftNIO 的用户编写使用 TLS 加密传输数据的协议客户端和服务器。

名称主要受到所使用库的名称(BoringSSL)的启发,而不是因为不知道协议的名称。我们知道协议是 TLS!

要开始使用,请查看 API 文档

使用 SwiftNIO SSL

SwiftNIO SSL 提供了两个 ChannelHandler 以用于加密数据流:《NIOSSLClientHandler》 和 《NIOSSLServerHandler》。这些都可以添加到 Channel 以在对应的通道上加密通信。

此外,我们还提供了一些用于配置 TLS 连接的低级原语。这些将在下面展示。

为了加密服务器连接,您需要一个 X.509 证书链文件(PEM 或 DER 格式,但 PEM 更简单),以及叶级证书的相应私钥。这些对象可以封装在一个用于初始化 ChannelHandlerTLSConfiguration 对象中。

例如

let configuration = TLSConfiguration.makeServerConfiguration(
    certificateChain: try NIOSSLCertificate.fromPEMFile("cert.pem").map { .certificate($0) },
    privateKey: .file("key.pem")
)
let sslContext = try NIOSSLContext(configuration: configuration)

let server = ServerBootstrap(group: group)
    .childChannelInitializer { channel in
        // important: The handler must be initialized _inside_ the `childChannelInitializer`
        let handler = try NIOSSLServerHandler(context: sslContext)

        [...]
        channel.pipeline.addHandler(handler)
        [...]
    }

对于客户端,配置稍简单些,因为客户端不需要证书链或私钥(尽管客户端 可能 拥有这些)。客户端的配置可能如下所示

let configuration = TLSConfiguration.makeClientConfiguration()
let sslContext = try NIOSSLContext(configuration: configuration)

let client = ClientBootstrap(group: group)
    .channelInitializer { channel in
        // important: The handler must be initialized _inside_ the `channelInitializer`
        let handler = try NIOSSLClientHandler(context: sslContext)

        [...]
        channel.pipeline.addHandler(handler)
        [...]
    }

请注意,SwiftNIO SSL 目前需要 Swift 5.2 及以上版本。2.13.x 及更早的版本支持 Swift 5.0 和 5.1