Я использую Tomcat (версии 7 и 8 в зависимости от проекта) с Java. Я хочу заставить Tomcat использовать только TLS 1.2 (точнее, запретить TLS v1.0 или v1.1). В разработке в Eclipse я добавил -Dhttps.protocols=TLSv1.2
в файл eclipse.ini; и я изменил файл server.xml на sslEnabledProtocols="TLSv1.2" sslProtocol="TLSv1.2"
. Похоже, это сработало, поскольку, когда я попал на сервер разработки со старой версией Firefox (v 17esr), я получил в браузере следующее сообщение:
Невозможно безопасно обмениваться данными с одноранговым узлом: нет общих алгоритмов шифрования. (Код ошибки: ssl_error_no_cypher_overlap)
Однако это не лучшая практика. Это уродливое сообщение об ошибке, которое на самом деле не говорит пользователю, что не так или как это исправить. Я бы предпочел идентифицировать на сервере, что браузер пытается подключиться к устаревшей версии TLS, и перенаправлять таких пользователей на страницу, уведомляющую их о необходимости обновления своего браузера, если они хотят использовать сайт.
Один из способов - использовать пользовательский агент, хотя я считаю это неэлегантным и не обязательно точным - некоторые браузеры дают пользователю возможность контролировать, какую версию TLS включить. Браузер может поддерживать TLS v1.2, но он может быть отключен пользователем.
Какая здесь лучшая практика для Java / Tomcat? Есть ли способ сделать это с помощью HttpServletRequest? Боюсь, что мне придется снова включить «старые» версии TLS, позволяя пользователю подключаться через HTTPS, а затем определять, что пользователь использует старую версию TLS, и перенаправлять.
Спасибо