我正在实现协议的客户端(通过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握手并随后确保所有后续消息都已加密?