TLSv1.2と暗号{ecdhe_ecdsa、aes_256_cbc、sha384}のみをサポートするRabbitMQサーバー(Erlang OTP 18.1のRabbitMQバージョン3.6.0)があります。 AMQPを使用してJavaクライアントから接続しようとしています。次のようにソースコードが見えます:問題は、クライアントがサーバーに接続しようとすると、サーバはとの接続を禁止し、あるJava 7のTLSv1.2を使用してRabbitMQサーバーに接続できません
{ssl_options, [{cacertfile, "cacert.pem"},
{certfile, "cert.pem"},
{keyfile, "key.pem"},
{verify, verify_peer},
{versions, ['tlsv1.2']},
{ciphers, [{ecdhe_ecdsa,aes_256_cbc,sha384}]},
{fail_if_no_peer_cert, true}]}
:
final SSLContext context = SSLContext.getInstance("TLSv1.2");
context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
SSLContext.setDefault(context);
final String[] enabledCipherSuites = { "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" };
final SSLParameters defaultParams = context.getDefaultSSLParameters();
defaultParams.setCipherSuites(enabledCipherSuites);
final SSLParameters supportedParams = context.getSupportedSSLParameters();
supportedParams.setCipherSuites(enabledCipherSuites);
ConnectionFactory factory = new ConnectionFactory();
factory.useSslProtocol(context);
factory.setHost(RABBITMQ_ADMIN_HOST);
factory.setPort(RABBITMQ_CLIENT_PORT_SSL);
factory.setUsername(RABBITMQ_ADMIN_USER);
factory.setPassword(RABBITMQ_ADMIN_PWD);
return factory.newConnection();
ここでRabbitMQの設定ファイルからの抜粋です次のエラー:
:クライアント側で=ERROR REPORT==== 4-Aug-2016::23:15:24 ===
SSL: hello: tls_handshake.erl:167:Fatal error: insufficient security
、我々は、Javaの例外は、次のようになりますどのスローさ見ます
Received fatal alert: insufficient_security
Thread-1 sun.security.ssl.Alerts.getSSLException(Alerts.java:192),
sun.security.ssl.Alerts.getSSLException(Alerts.java:154),
sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1991),
sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1098),
sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344),
sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:721),
sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122),
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)
デフォルトのサポートされているsslパラメータに変更された暗号スイートを設定していても、サポートされているデフォルトの暗号スイートをログに記録すると、許可されていない他のすべてが表示されます。クライアントの起動中に、私が有効になり、デフォルトの暗号スイートを記録し、
-Dhttps.protocols=TLSv1.2
-Dhttps.cipherSuites=TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
-Ddeployment.security.TLSv1.2=true
-Ddeployment.security.TLSv1.1=false
-Ddeployment.security.SSLv3=false
プラス: は、私は、次の追加のJavaコマンドラインのparamsを使用してクライアントを起動します。これは、私が指定したものだけでなく、暗号スイートの全ホストを示しています。
誰かがこの問題をどのように解決できるかを理解するのに役立つことができますか?これをデバッグするのに役立つポインタは非常に役に立ちます。
Centosで実行していますか? – Gabriele
はい、私はCentOSバージョン7.2.1511です –