2017-06-07 3 views
1

Ich verwende Spring boot 1.2.2 und JDK1.8.0.40, ich habe die SSL-Verschlüsselungsanforderung als SSL_RSA_WITH_3DES_EDE_CBC_SHA angegeben und auch cer-Datei in Keystore importieren.JMS-Verbindungs-Handshake schlägt fehl für SSLCipherSuite SSL_RSA_WITH_3DES_EDE_CBC_SHA

Wenn ich mein Projekt ausführen, stelle ich die JVM-Argumente wie folgt:

-Djavax.net.debug=all -Djavax.net.ssl.keyStore=/java_home/jre/lib/security/cacerts -Djava.net.keyStorePassword=changeit 

Aber ich bekomme immer

handing exception:javax.net.ssl.SSLHandshakeException: No appropriate protocol(protocol is disabled or cipher suites are inappropriate) 
SEND TLSv1.2 ALERT: fatal, description = handshake_failure 
WRITE: TLSv1.2 Alert, length = 2 
[Raw write]: length = 7 
0000: 15 03 03 00 02 02 28  ......(
called closeSocket() 
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'XXXX' with connection mode 'Client' and host name 'xxx.xxx.com(xxxxx)'. 

der Tat habe ich mehrere Operationen tun um das Problem zu beheben, wie zB:

  1. ersetzen JCE Gläser verschlüsseln, um unlimit
  2. Import cer Datei
  3. angegeben jks Pfad in Jvm Argumente
  4. Verwenden von angepassten SSL Cipher Suite
  5. Verwendung von SSL-Kanal

Aber jetzt JKS, ich immer noch nicht auf Handshake und die Fehlerprotokolle sind die gleichen wie über.

Oder muss ich den Cer von meinem Computer generieren und auf den Server hochladen? Können Sie uns bitte einen Rat geben?

Antwort

1

SSL_RSA_WITH_3DES_EDE_CBC_SHA ist eine SSL 3-Cipher-Suite. SSL 3 ist unsicher und disabled by default in Java 8. Gibt es einen Grund, warum Sie eine CipherSuite für ein unsicheres Protokoll verwenden?

Wenn Sie bei einer einzelnen Verschlüsselungssuite bleiben möchten, können Sie eine auswählen, die Java 8 supports.

+0

ja, ich Kommentar jdk.tls.disabledAlgorithms = SSLv3 und viele ssl-Protokolle erhalten. Ich kann sehen, es gibt eine "no_certificate" Warnung im Abschnitt ServerHelloDone. Und es gibt einige Protokolle wie WRITE: SSLv3 Application Data. READ: SSLv3 Anwendungsdaten. Aber der Socket wurde sehr schnell geschlossen und kann immer noch keine Daten von MQ bekommen. – phony

1

Neue JDK-Versionen aktualisieren weiterhin die minimale Sicherheitsstufe, was gut ist. Es ist jedoch nicht immer einfach (oder möglich), diese Protokolleinschränkungen für alle beteiligten Komponenten auf dem neuesten Stand zu halten.

Der beste Weg ist wirklich eine Cipher-Suite auszuwählen, die unterstützt wird.

Wenn Sie sich jedoch in der Entwicklung befinden (und wissen, was Sie tun), können Sie diese Einschränkung zum Testen entfernen, indem Sie die jre \ lib \ security \ java.security-Datei Ihres JDK bearbeiten.

Suche nach jdk.tls.disabledAlgorithms und entfernen oder die Einschränkungen bearbeiten

# previously: 
# jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768 
jdk.tls.disabledAlgorithms=MD5withRSA, DH keySize < 768