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