2015-09-08 13 views
15

Ich habe einen https Web Service auf Java 7. Ich muss Änderungen vornehmen, so dass dieser Dienst nur tls1.2 Verbindung akzeptiert und ssl3 ablehnen , tls1.0 und tls1.1.Wie erzwinge Java Server nur tls 1.2 zu akzeptieren und tls 1.0 und tls 1.1 Verbindungen zu verwerfen

Ich habe den folgenden Java-Parameter hinzugefügt, so dass Tls1.2 höchste Priorität hat.

-Dhttps.protocols=TLSv1.2 

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

Ich habe etwas um die java.security-Datei im jdk/jre/lib/security-Ordner gespielt.

ich habe folgende momentan deaktiviert 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 benutze Java 7, aktualisiert 79. Ich neige nicht zu jeder Verbindung Abfangen und die tls Version zu überprüfen.

Mein Server-Zertifikat ist 2048 Bit mit MD5 mit RSA-Algorithmus generiert.

Wenn die Liste der deaktivierten Algorithmen RSA anstelle von RSA keySize < 2048 hat, bekomme ich den SSLHandShakeError mit der Fehlermeldung: keine Cipher Suites gemeinsam.

Mein Testprogramm läuft den HTTP-Server aus folgenden URL: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

bitte helfen, wie Java-1.2-Verbindungen nur tls akzeptieren zu machen.

+0

funktioniert 'SSLContext.getInstance (" TLSv1.2 ")? –

Antwort

17

Ich habe eine Lösung dafür gefunden. Ich habe die

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.

+6

Dies funktioniert nur mit Java 7 Update 75 und höher. – PankajSays

+0

wo soll ich das einstellen? – vikifor

+1

müssen Sie dies in der Datei "java.security" festlegen, die Sie im Ordner /jre/lib/security finden. – PankajSays

1

Nur eine kleine Bemerkung;

In der Frage haben Sie angegeben, dass Sie ein 2048-Zertifikat mit MD5 generiert haben. Aber im Cert-Pfad alg hast du MD5 deaktiviert, also sollte das normalerweise nicht funktionieren. Zweitens werden Server-Zertifikate, die mit einem MD5-Hash generiert wurden, von modernen Browsern wie Internet Explorer 10/Edge gesperrt.

Ich würde Ihnen empfehlen, Ihr Server-Zertifikat mindestens mit einem SHA256 oder < Hash zu generieren.