我正在实现一个协议的客户端(通过 TCP),它正在使用 akka.io.TCP 与服务器通信。根据此服务器的配置方式,它可能支持也可能不支持 SSL。
要确定它是否支持 SSL,首先将纯文本消息发送到服务器(类似于“SslSupported”的内容)。然后,服务器将使用单个字符消息“Y”/“N”进行响应。如果是,则应启动 SSL 握手并加密会话的其余部分。到目前为止,我已经实现了服务器回复“N”时的协议。
目前,我有一些类似的东西(请注意,这远非完整的代码):
IO(Tcp) ! Bind(self, new InetSocketAddress(host, port))
def receive = {
case Connected(remote, local) =>
sender() ! Write(stringToByteString("SslSupported"))
case Received(data) =>
data.headOption.map(_.toChar) match {
case 'N' => // Continue with plain text protocol
case 'Y' => ??? // Should start with SSL handshake here
}
}
我将如何启动 SSL 握手并随后确保所有后续消息都已加密?