it-swarm.com.ru

Как заставить сервер Java принимать только tls 1.2 и отклонять соединения tls 1.0 и tls 1.1

У меня есть веб-служба https, работающая на Java 7. Мне нужно внести изменения, чтобы эта служба принимала только соединение tls1.2 и отклоняла ssl3, tls1.0 и tls1.1.

Я добавил следующий параметр Java, чтобы tls1.2 имел наивысший приоритет.

-Dhttps.protocols=TLSv1.2

но он также принимает соединения tls1.0 от клиентов Java. если клиент также работает с указанным выше параметром Java, соединение имеет тип tls1.2, но если клиент работает без этого параметра, то соединение имеет тип tls1.0.

Я немного поигрался с файлом Java.security в папке jdk/jre/lib/security.

в настоящее время у меня есть следующие отключенные алгоритмы:

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

Я использую Java 7, обновление 79. Я не склонен перехватывать каждое соединение и проверять версию tls.

Мой сертификат сервера 2048 бит, сгенерированный с MD5 с алгоритмом RSA.

Если список отключенных алгоритмов имеет RSA вместо RSA keySize <2048, я получаю SSLHandShakeError с сообщением об ошибке: никаких общих наборов шифров нет.

Моя тестовая программа запускает http-сервер со следующего URL: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

пожалуйста, помогите, как заставить Java принимать только соединения tls 1.2.

16
PankajSays

Я нашел решение для этого. Я установил 

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

в файле jre/lib/security/Java.security на сервере.

После установки этого сервер только принимает соединение TLS1.2 и отклоняет более низкие версии протокола безопасности.

23
PankajSays

Просто небольшое замечание; 

В вопросе вы указали, что сгенерировали сертификат размера 2048 с MD5. Но в сертификате alg вы отключили MD5, так что обычно это не должно работать. Во-вторых, сертификаты сервера, сгенерированные с помощью хэша MD5, запрещены в современных браузерах, таких как Internet Explorer 10/Edge. 

Я хотел бы посоветовать вам сгенерировать сертификат сервера по крайней мере с SHA256 или <хеш. 

2
TyGp

Я также сделал те же изменения в файле "/Java/jdk1.7.0_79/jre/lib/security"-Java.security, но некоторые клиенты все еще могут вызывать мои службы по протоколу SSL.

---- Изменения Jdk.tls.disabledAlgorithms = SSL, SSLv2, SSLv3, TLSv1, TLSv1.1, MD5, SSLv3, DSA, RSA keySize <2048

0
Abhimanyu Kumar