我从现有的连接服务器套接字创建了一个SslSocket。
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
SSLSocket sslSocket = (SSLSocket) socketFactory.createSocket(socket, socket.getInetAddress().getHostAddress(), socket.getPort(), false);
在此步骤之后,ssl握手成功。
当我写入sslSocket
时,我能够看到日志(-Djavax.net.debug=all)
显示SslEngine
正在进行加密,因为它会在加密前打印字节
Padded plaintext before ENCRYPTION: len = 276
0000: 01 00 01 14 C0 00 01 10 00 00 00 04 28 60 00 02
....
WRITE: TLSv1.2 Application Data, length = 300
但它不会将任何数据写入套接字。日志中也没有打印加密字节。似乎在打印WRITE: TLSv1.2 Application Data, length = 300
后卡在某处。我查看了WireShark,没有传输字节。
但是同样的sslSocket
能够在握手阶段进行握手并写入套接字。
类似地,我有另一种情况,其中连接的客户端套接字转换为sslSocket。在这种情况下,它在握手后工作正常,并且能够将加密数据发送到套接字。
不确定为什么在握手后它在服务器机箱中不起作用。