我正在尝试在我的iOS应用中创建websocket服务器和客户端,在此示例实现的帮助下,我成功地做到了这一点。(https://github.com/apple/swift-nio/tree/master/Sources/NIOWebSocketServer)-因此当前的工作情况是,我在应用启动时运行websocket服务器,然后将客户端加载到可以连接的webview中对它。
现在我的问题是我希望我的服务器保护Websocket服务器安全(基本上从HTTPS html页面连接到websocket服务器)
我是网络编程的新手,至少可以说Swift-nio文档没有。据我了解,我可以使用(https://github.com/apple/swift-nio-transport-services)
我发现了这个线程正是我所需要的-https://github.com/apple/swift-nio-transport-services/issues/39-只要我不在乎用例,就可以禁用TLS身份验证可以连接websocket。
所以我的问题是如何扩展我的客户端(https://github.com/apple/swift-nio/tree/master/Sources/NIOWebSocketClient)和服务器(https://github.com/apple/swift-nio/ tree / master / Sources / NIOWebSocketServer)以使用swift-nio-transport-service。
我可以添加NIOSSLContext
和东西,但我想我需要添加EventLoopGroup
和新bootstrap
方法。我知道答案就在那...。但是我似乎无法确切指出。
任何指针将不胜感激。
谢谢。
要将简单的NIO
服务器转换为一个服务器NIOTransportServices
,您需要进行以下更改:
在NIOTransportServices
服务器上添加依赖项。
更改MultiThreadedEventLoopGroup
为NIOTSEventLoopGroup
。
更改ClientBootstrap
为NIOTSConnectionBootstrap
。
更改ServerBootstrap
为NIOTSListenerBootstrap
。
生成并运行您的代码。
有些ChannelOption
不起作用NIOTransportServices
,但大多数却起作用:确认事物运行正常的最简单方法是快速测试通用流程。
这不会为您的应用程序添加任何额外的功能,但是确实可以使用iOS API为您提供相同的功能。
要将TLS添加到NIOTSConnectionBootstrap
或NIOTSListenerBootstrap
,请使用.tlsOptions
函数。例如:
NIOTSListenerBootstrap(group: group)
.tlsOptions(myTLSOptions())
配置a NWProtocolTLS.Options
有点棘手。您需要获取SecIdentity
,需要与钥匙串进行交互。奎因在这里对此进行了一些讨论。
一旦有了SecIdentity
,您就可以像这样使用它:
func myTLSOptions() -> NWProtocolTLS.Options {
let optiOns= NWProtocolTLS.Options()
let yourSecIdentity = // you have to implement something here
sec_protocol_options_set_local_identity(options.securityProtocolOptions, sec_identity_create(yourSecIdentity)
return options
}
一旦编写了代码,一切都会顺利进行!
作为扩展,如果您想在Linux上保护NIO服务器的安全,可以使用swift-nio-ssl来实现。由于没有钥匙串API,因此具有单独的配置,因此您需要从文件中加载更多密钥和证书。