2017-12-05 11 views
0

TLSv1.2を使用してサーバーとRabbitMQ接続を作成しようとしていますが、java.net.SocketExceptionがあります。接続のリセットまたはjavax.net.ssl.SSLHandshakeException:致命的な警告を受け取りました:handshake_failure(この例外は変更されているようです無作為に)。なぜ私のrabbitMQクライアントに接続できませんか?

私はTLSv1.0を持っていたときに動作しましたが、サーバがプロトコルを変更したときに(同じ暗号、ポートなどを使用していても)動作を停止しました。

vhost /その他の接続パラメータが正しくない場合は、この例外が発生する可能性はありますか?

接続する前に、私は設定しています:ここで

System.setProperty("https.protocols", "TLSv1.2"); 

は私の設定です:

public ConnectionFactory get() throws IOException, KeyStoreException, NoSuchAlgorithmException, 
     CertificateException, UnrecoverableKeyException, KeyManagementException, URISyntaxException { 
    final ConnectionFactory cf = new ConnectionFactory(); 

    final SSLContext sslContext = getSSLContext(); 

    cf.useSslProtocol(sslContext); 

    final ConnectionSettings connectionSettings = getConnectionSettings(sslContext.getSocketFactory()); 

    cf.setHost(connectionSettings.getHost()); 
    cf.setPort(connectionSettings.getPort()); 
    cf.setVirtualHost(connectionSettings.getVirtualHost()); 
    //using cf.setUsername and cs.setPassword doesn't work 

    cf.setSaslConfig(DefaultSaslConfig.EXTERNAL); 
    cf.setAutomaticRecoveryEnabled(false); 
    cf.setTopologyRecoveryEnabled(false); 

    return cf; 
} 

とgetSSLContext()メソッド:私はとき

private SSLContext getSSLContext(){ 
    //SECURE_PROTOCOLE = "TLSv1.2" 
    final SSLContext sslContext = SSLContext.getInstance(SECURE_PROTOCOLE); 

    KeyStore keystore = KeyStore.getInstance("Windows-MY"); 
    keystore.load(null, null); 

    final KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    kmf.init(keystore, null); 


    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 

     public X509Certificate[] getAcceptedIssuers() { 
      return null; 
     } 

     @Override 
     public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 
      // Not implemented 
     } 

     @Override 
     public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 
      // Not implemented 
     } 
    } }; 

    sslContext.init(keyManagerWrapper(kmf), 
      trustAllCerts, new SecureRandom()); 
    return sslContext; 
    } 

例外が発生します新しい接続を作成しようとしています:

this.connectionFactory = new ConnectionFactoryProvider().get(); 
this.connection = this.connectionFactory.newConnection(); 

答えて

0

RabbitMQチームはthis mailing listを監視し、ときどきStackOverflowに関する質問に答えます。


限定された情報でこれらのようなTLSエラーを診断することは非常に困難です。両方RabbitMQのサーバとクライアント

  • JavaバージョンとJavaクライアントバージョン
  • ため

    • RabbitMQのバージョン
    • Erlangのバージョン
    • オペレーティングシステムのプラットフォームとバージョン:あなたは参考になる次の情報を提供していません。

    このコード行は、Windowsでクライアントアプリケーションを実行していることを示しています。

    KeyStore.getInstance("Windows-MY") 
    

    上記の情報とTLS/SSL証明書の完全なセットを提供して、理想的な問題を再現できる場合は、

    RabbitMQのマニュアルには、comprehensive TLS/SSL troubleshooting guideも含まれています。

    関連する問題