apple/swift-nio-ssl
SwiftNIO SSL is a Swift package that contains an implementation of TLS based on BoringSSL. This package allows users of [SwiftNIO](https://github.com/apple/swift-nio) to write protocol clients and servers that use TLS to secure data in flight.
Using SwiftNIO SSL
SwiftNIO SSL provides two ChannelHandlers to use to secure a data stream: the NIOSSLClientHandler and the NIOSSLServerHandler. Each of these can be added to a Channel to secure the communications on that channel.
Additionally, we provide a number of low-level primitives for configuring your TLS connections. These will be shown below.
To secure a server connection, you will need a X.509 certificate chain in a file (either PEM or DER, but PEM is far easier), and the associated private key for the leaf certificate. These objects can then be wrapped up in a TLSConfiguration object that is used to initialize the ChannelHandler.
For example:
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.syncOperations.addHandler(handler)
[...]
}For clients, it is a bit simpler as there is no need to have a certificate chain or private key (though clients may have these things). Setup for clients may be done like this:
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.syncOperations.addHandler(handler)
[...]
}The most recent versions of SwiftNIO SSL support Swift 5.7 and newer. The minimum Swift version supported by SwiftNIO SSL releases are detailed below:
SwiftNIO SSL | Minimum Swift Version --------------------|---------------------- 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 ..< 2.29.3 | 5.8 2.29.3 ..< 2.31.0 | 5.9 2.31.0 ..< 2.35.0 | 5.10 2.35.0 ..< 2.37.0 | 6.0 2.37.0 ..< | 6.1
Package Metadata
Repository: apple/swift-nio-ssl
Default branch: main
README: README.md