CNIOBoringSSL 2.19.0

CNIOBoringSSL 2.19.0

Daniel AlmPeter AdamsGeorge BarnettJohannes WeissCory BenfieldJake PrickettDavid Evans维护。



  • 苹果公司

SwiftNIO SSL

SwiftNIO SSL是一个Swift包,它包含了一个基于BoringSSL实现的TLS的版本。这个包允许使用SwiftNIO的协议客户端和服务器,它们能够用TLS来保护传输中的数据。

这个名字主要受到该包使用的库(BoringSSL)的名字的启发,并不是因为我们不知道协议的名字。我们知道协议就是TLS!

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

使用SwiftNIO SSL

SwiftNIO SSL提供了两个ChannelHandler来确保数据流的流量安全:NIOSSLClientHandlerNIOSSLServerHandler。这些都可以添加到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。