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 更简单),以及叶级证书的相应私钥。这些对象可以封装在一个用于初始化 ChannelHandler
的 TLSConfiguration
对象中。
例如
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