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();