2016-08-04 14 views
0

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を使用してクライアントを起動します。これは、私が指定したものだけでなく、暗号スイートの全ホストを示しています。

誰かがこの問題をどのように解決できるかを理解するのに役立つことができますか?これをデバッグするのに役立つポインタは非常に役に立ちます。

+0

Centosで実行していますか? – Gabriele

+0

はい、私はCentOSバージョン7.2.1511です –

答えて

0

問題はCentOSに上ECDHEと関連していることができ、この記事を参照してください。 https://www.internetstaff.com/enable-elliptical-curve-diffie-hellman-ecdhe-linux/

The problem is that Diffie-Hellman algorithms are very slow. This can be offset to a large degree by using Elliptical Curve Diffie-Hellman (ECDHE). The problem for Red Hat/CentOS/Fedora/Amazon Linux users is that Red Hat intentionally disables ECDHE ciphers (among others) because they’re unsure of the patent issues surrounding them.

私はこの読むことをお勧め:http://erlang.org/pipermail/erlang-questions/2013-December/076322.html

も、この(私の)スレッド:http://erlang.org/pipermail/erlang-questions/2016-July/089797.html

私はECDHE暗号クライアント側の使用を避ける同様の問題を解決しました。

関連する問題