我试图通过纯文本通信通道隧道(我想过使用base64),但我似乎无法找到不使用SSLSocket的tls服务器示例。是否存在与传输不可知的java tls服务器实现?
对于tls客户端,我能够找到充气城堡TlsProtocolHandler,它是传输不可知的因为它只是使用输入和输出流,但我找不到任何类似于服务器tls实现的东西。
我试图通过纯文本通信通道隧道(我想过使用base64),但我似乎无法找到不使用SSLSocket的tls服务器示例。是否存在与传输不可知的java tls服务器实现?
对于tls客户端,我能够找到充气城堡TlsProtocolHandler,它是传输不可知的因为它只是使用输入和输出流,但我找不到任何类似于服务器tls实现的东西。
使用SSLSocket
:
你一定可以实现自己的Socket
是不是基于TCP。例如有Unix socket implementations。一旦您拥有自己的运输工具,SSLSocketFactory.createSocket(Socket, ...)
可以在您自己的Socket
之上建立SSLSocket
。
使用SSLEngine
(稍微复杂):
SSLEngine.wrap
(and unwrap
)上ByteBuffer
的工作。这些缓冲区可能来自您自己的通讯渠道。
您可能遇到的一个难题是将证书概念映射到您的自定义传输。证书(或更一般地证明服务器的身份)对于SSL/TLS信道的安全性至关重要,以防止MITM攻击。身份验证需要将证书检查为可信,并且它的身份对应于您尝试访问的实体(主机名验证)。主机名验证在默认情况下未启用,但是如果您没有主机名(例如,这可能是unix套接字的问题),则无论如何您都需要找到类似的东西,尽管在这种情况下使用SSL可能不会无论如何感觉)。
相当复杂一些;-) – EJP
一个随机想法的位,但你可以创建一个自定义['SocketFactory'](http://docs.oracle.com/javase/7/docs/api/javax/net/SocketFactory.html)文字流?根本不会有实际的套接字,但SSL实现不知道。 –
是的,那可以工作。您将返回一个虚拟套接字和虚拟输入和输出流。 TLS根本不在乎。 OO编程,对吧?关于界面。 –