2015-09-08 42 views
15

Mam usługę WWW https działającą w java 7. Muszę wprowadzić zmiany, aby ta usługa akceptowała tylko połączenie tls1.2 i odrzucała ssl3 , tls1.0 i tls1.1.Jak zmusić serwer java do akceptowania tylko tls 1.2 i odrzucania połączeń tls 1.0 i tls 1.1

Dodałem następujący parametr java, tak aby tls1.2 miał najwyższy priorytet.

-Dhttps.protocols=TLSv1.2 

, ale akceptuje również połączenia tls1.0 z klientów java. jeśli klient działa również z powyższym parametrem java, połączenie to tls1.2, ale jeśli klient działa bez tego parametru, połączenia mają wartość tls1.0.

Zrobiłem trochę zabawy wokół pliku java.security w folderze jdk/jre/lib/security.

Obecnie mam następujące algorytmy niepełnosprawne:

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 

używam Java 7, zaktualizuj 79. Nie jestem skłonny do przechwycenia każdego połączenia i sprawdzanie wersji TLS.

Mój certyfikat serwera jest 2048-bitowy wygenerowany za pomocą MD5 z algorytmem RSA.

Jeśli lista wyłączonych algorytmów ma RSA w miejsce klucza RSA Rozmiarówka < 2048, otrzymuję komunikat SSLHandShakeError z komunikatem o błędzie: brak wspólnych zestawów szyfrów.

Mój program testowy jest uruchomiony serwer HTTP z adresem URL: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

proszę o pomoc jak zrobić Java zaakceptować tls tylko 1,2 połączeń.

+0

Czy działa 'SSLContext.getInstance (" TLSv1.2 ")'? –

Odpowiedz

17

Znalazłem rozwiązanie tego problemu. Ustawiam na serwerze plik jre/lib/security/java.security w postaci pliku

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

Po ustawieniu tego, serwer akceptuje tylko połączenie TLS1.2 i odrzuca wersje protokołu niższego bezpieczeństwa.

+6

Działa to tylko z aktualizacją 75 Java 75 i nowszymi. – PankajSays

+0

gdzie to ustawić? – vikifor

+1

musisz ustawić to w pliku "java.security", który znajdziesz w /jre/lib/folderze bezpieczeństwa. – PankajSays

1

Tylko mała uwaga;

W pytaniu podałeś, że wygenerowałeś certyfikat wielkości 2048 z MD5. Ale w ścieżce certyfikatów wyłączyłeś MD5, więc to normalnie nie powinno działać. Po drugie, certyfikaty serwera wygenerowane za pomocą skrótu MD5 są zakazane w nowoczesnych przeglądarkach, takich jak Internet Explorer 10/Edge.

Chciałbym doradzić, aby wygenerować certyfikat serwera przynajmniej z hashem SHA256 lub <.