2016-05-03 3 views
0

Ich versuche, einen Client/Server mit der SSL-Kommunikation zu erstellen. Ich folgte den hier aufgeführten Anweisungen (https://www.rabbitmq.com/ssl.html)."java.net.SocketException: Verbindung zurückgesetzt" bei der Ausführung eines simpleSSL-Clients

Ich bin mit diesem Fehler grüßte:

, während der Server ausgeführt wird:

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) 

während der Verwendung des Clients:

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) 

hier Datei meine rabbit.config:

[ 
    {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, []} 
     ] 
    } 
]. 

hier ist auch mein 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()); 

Antwort

3

java.net.SocketException: Connection reset im Allgemeinen verursacht spricht von Remote-Peer-Verbindung geschlossen.

Ich denke, Ihre SSL-Konfiguration passte nicht gut mit dem Server. Vorschlag hier ist Debug-SSL-Verbindung, um die Ursache zu finden.

Versuchen Sie, diese Systemeigenschaft auf Ihre JVM params anhängen:

-Djavax.net.debug=all 

Mehr Details here

+0

Ich bekomme den gleichen Fehler beim Versuch, von Soapui zu treffen .. Können Sie bitte lassen Sie mich wissen, wo muss ich -Djavax.net.debug = alle hinzufügen? – ChanGan

+1

@ChanGan: google für "soapui jvm Einstellungen" – rkosegi

+0

Ich habe in SoapUI-5.0.0.vmoptions hinzugefügt .. Lassen Sie mich sehen, ich bin in der Lage, das Problem zu lösen. Ich habe keine Ahnung bekommen .. das gleiche Fehlerprotokoll bekommen .. – ChanGan

0

In der v-Konfiguration Sie Port 5675 für SSL-Listener festgelegt haben, aber in Code, den Sie 5673 verwenden.

0

Ich konnte dies in Java 1.7 beheben, indem Sie Folgendes angeben: SSLContext sc = SSLContext.getInstance ("TLSv1.2");