SwiftNIO SSL 是一个 Swift 包,其中包含基于 BoringSSL 的 TLS 实现。 此包允许 SwiftNIO 的用户编写使用 TLS 来保护传输中数据的协议客户端和服务器。
这个名字的灵感主要来自这个包使用的库(BoringSSL)的名称,而不是因为我们不知道协议的名称。 我们知道协议是 TLS!
要开始使用,请查看 API 文档。
SwiftNIO SSL 提供了两个 ChannelHandler
,用于保护数据流:NIOSSLClientHandler
和 NIOSSLServerHandler
。 这些都可以添加到 Channel
中,以保护该通道上的通信安全。
此外,我们还提供了一些用于配置 TLS 连接的底层原语。 这些将在下面显示。
要保护服务器连接,您需要一个文件中的 X.509 证书链(PEM 或 DER 格式,但 PEM 更容易),以及叶子证书的关联私钥。 然后可以将这些对象包装在 TLSConfiguration
对象中,该对象用于初始化 ChannelHandler
。
例如
let configuration = TLSConfiguration.makeServerConfiguration(
certificateChain: try NIOSSLCertificate.fromPEMFile("cert.pem").map { .certificate($0) },
privateKey: try .privateKey(.init(file: "key.pem", format: .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 = 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.7 及更高版本。 SwiftNIO SSL 版本支持的最低 Swift 版本详述如下
SwiftNIO SSL | 最低 Swift 版本 |
---|---|
2.0.0 ..< 2.14.0 |
5.0 |
2.14.0 ..< 2.19.0 |
5.2 |
2.19.0 ..< 2.23.0 |
5.4 |
2.23.0 ..< 2.23.2 |
5.5.2 |
2.23.2 ..< 2.26.0 |
5.6 |
2.26.0 ..< 2.27.0 |
5.7 |
2.27.0 ... |
5.8 |