SwiftNIOSSL 2.19.0

SwiftNIOSSL 2.19.0

由以下人员维护:George BarnettJohannes WeissDaniel AlmCory BenfieldPeter AdamsJake PrickettDavid Evans



 
依赖
CNIOBoringSSLShims= 2.19.0
CNIODarwin< 3, >= 2.32.0
SwiftNIOTLS< 3, >= 2.32.0
SwiftNIOPosix< 3, >= 2.32.0
CNIOAtomics< 3, >= 2.32.0
SwiftNIOEmbedded< 3, >= 2.32.0
CNIOLinux< 3, >= 2.32.0
CNIOWindows< 3, >= 2.32.0
SwiftNIOCore< 3, >= 2.32.0
_NIODataStructures< 3, >= 2.32.0
CNIOBoringSSL= 2.19.0
SwiftNIO< 3, >= 2.32.0
SwiftNIOConcurrencyHelpers< 3, >= 2.32.0
 

  • 撰文
  • 苹果公司

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