我正在尝试通过纯文本通信通道(我考虑过使用 base64)来隧道 tls,但我似乎找不到不使用 SSLSocket 的 tls 服务器示例。
对于 tls 客户端,我能够找到与传输无关的充气城堡 TlsProtocolHandler,因为它只使用输入和输出流,但是对于服务器 tls 实现,我找不到任何类似的东西。
使用SSLSocket
:
您当然可以实现自己Socket
的不基于 TCP 的。例如,有Unix 套接字实现。一旦你有它为你自己的运输,SSLSocketFactory.createSocket(Socket, ...)
可以建立一个SSLSocket
在你自己的之上Socket
。
使用SSLEngine
(有点复杂):
SSLEngine.wrap
(和unwrap
)在ByteBuffer
s 上工作。这些缓冲区可能来自您自己的通信渠道。
您可能遇到的困难之一是将证书的概念映射到您的自定义传输。证书(或更一般地证明服务器的身份)对于 SSL/TLS 通道的安全性至关重要,以防止 MITM 攻击。身份验证需要检查证书是否受信任,并且它的身份是否与您尝试访问的实体相对应(主机名验证)。默认情况下不启用主机名验证,但是如果您没有主机名,则无论如何您都需要找到类似的东西(例如,这可能是 unix 套接字的问题,尽管在这种情况下使用 SSL 可能不会反正感觉)。