Как заставить 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.
- Использование самозаверяющего сертификата с .NET HttpWebRequest / Response
- Как разрешены имена серверов сертификатов SSL / Можно ли добавлять альтернативные имена с помощью keytool?
- Сертификаты клиента Java через HTTPS / SSL
- Как обрабатывать недопустимые SSL-сертификаты с помощью Apache HttpClient?
- Как перечислить / экспортировать закрытые ключи из хранилища ключей?
Я немного поиграл с файлом 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 соединений.
- Как сообщить `ссылкам` игнорировать истекший SSL-сертификат и продолжить?
- Как использовать ssh / scp между непубличными машинами
- Почему некоторые веб-сайты отображают название компании рядом с URL-адресом?
- Преобразовать .pem в .crt и .key
- Есть ли .NET-версия TLS 1.2?
- javax.net.ssl.SSLPeerUnverifiedException: имя хоста не соответствует теме сертификата, предоставленной партнером
- Заставить браузер загружать «https» версию веб-сайта, а не «http»?
- Как исправить, если сайт всегда перенаправляется на другой фишинг-сайт?
Я нашел решение для этого. Я установил
jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1
в файле jre / lib / security / java.security на сервере.
После этого сервер только принимает соединение TLS1.2 и отклоняет более низкие версии протокола безопасности.
Просто небольшое замечание;
В вопросе вы заявили, что вы создали сертификат размера 2048 с MD5. Но в пути cert alg вы отключили MD5, поэтому это нормально не должно работать. Во-вторых, сертификаты сервера, созданные с использованием хеша MD5, запрещены из современных браузеров, таких как Internet Explorer 10 / Edge.
Я хотел бы посоветовать вам сгенерировать сертификат сервера, по крайней мере, с помощью SHA256 или
Я также сделал те же изменения в файле /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