“java.net.SocketException:连接重置"运行 simpleSSL 客户端时 [英] "java.net.SocketException: Connection reset" when running a simpleSSL client
问题描述
我正在尝试使用 SSL 通信创建客户端/服务器.我按照此处列出的说明操作(https://www.rabbitmq.com/ssl.html).
我遇到了这个错误:
在运行服务器时:
java.net.SocketException:连接重置在 java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)在 java.net.SocketOutputStream.write(SocketOutputStream.java:153)在 java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)在 java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)在 java.io.DataOutputStream.flush(DataOutputStream.java:123)在 com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:129)在 com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:134)在 com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:277)在 com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:678)在 com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:722)
使用客户端时:
线程main"中的异常java.net.SocketException:连接重置在 java.net.SocketInputStream.read(Unknown Source)在 java.net.SocketInputStream.read(Unknown Source)在 sun.security.ssl.InputRecord.readFully(来源不明)在 sun.security.ssl.InputRecord.read(未知来源)在 sun.security.ssl.SSLSocketImpl.readRecord(来源不明)在 sun.security.ssl.SSLSocketImpl.waitForClose(来源不明)在 sun.security.ssl.HandshakeOutStream.flush(来源不明)在 sun.security.ssl.Handshaker.kickstart(来源不明)在 sun.security.ssl.SSLSocketImpl.kickstartHandshake(来源不明)在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(来源不明)在 sun.security.ssl.SSLSocketImpl.writeRecord(来源不明)在 sun.security.ssl.AppOutputStream.write(来源不明)在 java.io.BufferedOutputStream.flushBuffer(Unknown Source)在 java.io.BufferedOutputStream.flush(未知来源)在 java.io.DataOutputStream.flush(未知来源)在 com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:129)在 com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:134)在 com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:277)在 com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:678)在 com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:722)在 rmqClient.simpleSSL.main(simpleSSL.java:23)
这是我的 rabbit.config 文件:
<预><代码>[{ssl, [{versions, ['tlsv1.2', 'tlsv1.1']}]},{兔子,[{ssl_listeners, [5675]},{ssl_options, [{cacertfile,"sslConn/ca_certificate.pem"},{certfile, "sslConn/server_certificate.pem"},{keyfile, "sslConn/server_key.pem"},{版本,['tlsv1.2','tlsv1.1']},{密码,[{ecdhe_ecdsa,aes_128_cbc,sha256},{ecdhe_ecdsa,aes_256_cbc,sha}]}]},{tcp_listeners, [5672]},{loopback_users, []}]}].这也是我的客户端代码:
factory.setHost("10.3.9.139");factory.setPort(5673);factory.setUsername("User1");factory.setPassword("User1");factory.useSslProtocol();连接 conn = factory.newConnection();频道频道 = conn.createChannel();channel.queueDeclare("rabbitmq-java-test", false, true, true, null);channel.basicPublish("", "rabbitmq-java-test", null, "Hello, World".getBytes());
java.net.SocketException: Connection reset
一般来讲是远程对端关闭连接造成的.
我猜你的 SSL 配置不适合服务器.这里的建议是调试 SSL 连接以找到根本原因.
尝试将此系统属性附加到您的 JVM 参数中:
-Djavax.net.debug=all
更多详情此处
I am attempting to create a client/server using the SSL communication. I followed the instructions listed here (https://www.rabbitmq.com/ssl.html).
I am greeted with this error:
while running the server :
java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at java.io.DataOutputStream.flush(DataOutputStream.java:123)
at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:129)
at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:134)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:277)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:678)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:722)
while using the client :
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.waitForClose(Unknown Source)
at sun.security.ssl.HandshakeOutStream.flush(Unknown Source)
at sun.security.ssl.Handshaker.kickstart(Unknown Source)
at sun.security.ssl.SSLSocketImpl.kickstartHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
at sun.security.ssl.AppOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at java.io.DataOutputStream.flush(Unknown Source)
at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:129)
at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:134)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:277)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:678)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:722)
at rmqClient.simpleSSL.main(simpleSSL.java:23)
here's my rabbit.config file :
[
{ssl, [{versions, ['tlsv1.2', 'tlsv1.1']}]},
{
rabbit,
[
{ssl_listeners, [5675]},
{ssl_options, [{cacertfile,"sslConn/ca_certificate.pem"},
{certfile, "sslConn/server_certificate.pem"},
{keyfile, "sslConn/server_key.pem"},
{versions, ['tlsv1.2', 'tlsv1.1']},
{ciphers, [{ecdhe_ecdsa,aes_128_cbc,sha256},
{ecdhe_ecdsa,aes_256_cbc,sha}]}
]},
{tcp_listeners, [5672]},
{loopback_users, []}
]
}
].
here's also my client code :
factory.setHost("10.3.9.139");
factory.setPort(5673);
factory.setUsername("User1");
factory.setPassword("User1");
factory.useSslProtocol();
Connection conn = factory.newConnection();
Channel channel = conn.createChannel();
channel.queueDeclare("rabbitmq-java-test", false, true, true, null);
channel.basicPublish("", "rabbitmq-java-test", null, "Hello, World".getBytes());
java.net.SocketException: Connection reset
is generally speaking caused by remote peer closed connection.
I guess your SSL config didn't fit well with server. Suggestion here is to debug SSL connection to find root cause.
Try to append this system property to your JVM params:
-Djavax.net.debug=all
More details here
这篇关于“java.net.SocketException:连接重置"运行 simpleSSL 客户端时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!