wake-up-neo.com

Wie erzwinge ich, dass der Java-Server nur tls 1.2 akzeptiert und tls 1.0- und tls 1.1-Verbindungen ablehnt

Ich habe einen https-Webdienst, der auf Java 7 ausgeführt wird. Ich muss Änderungen vornehmen, damit dieser Dienst nur die tls1.2-Verbindung akzeptiert und ssl3, tls1.0 und tls1.1 ablehnt.

Ich habe den folgenden Java-Parameter hinzugefügt, sodass tls1.2 die höchste Priorität hat.

-Dhttps.protocols=TLSv1.2

es akzeptiert aber auch die tls1.0-Verbindungen von Java-Clients. Wenn der Client auch mit dem obigen Java-Parameter ausgeführt wird, ist die Verbindung tls1.2. Wenn der Client jedoch ohne diesen Parameter ausgeführt wird, ist die Verbindung tls1.0.

Ich habe etwas um die Java.security-Datei im Ordner jdk/jre/lib/security herumgespielt.

ich habe derzeit folgende deaktivierte Algorithmen:

jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224

Ich verwende Java 7, Update 79. Ich neige nicht dazu, jede Verbindung abzufangen und die tls-Version zu überprüfen.

Mein Serverzertifikat ist 2048 Bit und wird mit MD5 mit RSA-Algorithmus generiert.

Wenn die Liste der deaktivierten Algorithmen RSA anstelle von RSA keySize <2048 enthält, erhalte ich den SSLHandShakeError mit Fehlermeldung: Keine gemeinsamen Chiffriersätze.

Mein Testprogramm führt den http-Server unter folgender URL aus: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

bitte helfen Sie, wie Sie mit Java nur Verbindungen mit TLS 1.2 akzeptieren.

16
PankajSays

Ich habe dafür eine Lösung gefunden. Ich habe das eingestellt 

jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1

in der Datei jre/lib/security/Java.security auf dem Server.

Nach dieser Einstellung akzeptiert der Server nur die TLS1.2-Verbindung und lehnt niedrigere Sicherheitsprotokollversionen ab.

23
PankajSays

Nur eine kleine Bemerkung; 

In der Frage, die Sie angegeben haben, haben Sie mit MD5 ein Zertifikat der Größe 2048 generiert. Aber im cert-Pfad alg haben Sie MD5 deaktiviert, so dass dies normalerweise nicht funktionieren sollte. Zweitens werden mit einem MD5-Hash erzeugte Serverzertifikate von modernen Browsern wie Internet Explorer 10/Edge verboten. 

Ich möchte Ihnen raten, Ihr Serverzertifikat mindestens mit einem SHA256 oder einem <Hash zu generieren. 

2
TyGp

Ich habe auch die gleichen Änderungen in der Datei "/Java/jdk1.7.0_79/jre/lib/security"-Java.security" vorgenommen, einige Clients können jedoch weiterhin meine Dienste mit dem SSL-Protokoll aufrufen.

---- Änderungen Jdk.tls.disabledAlgorithms = SSL, SSLv2, SSLv3, TLSv1, TLSv1.1, MD5, SSLv3, DSA, RSA-Schlüsselgröße <2048

0
Abhimanyu Kumar