Ограничить наборы шифров на уровне JRE

Наше Java-приложение предоставляет множество различных интерфейсов (SMTP, FTP, HTTP), защищенных с помощью SSL/TLS. Теперь цель состоит в том, чтобы ограничить наборы шифров, разрешенные на этих интерфейсах, только "сильными". У меня уже есть список, и понятно, как заставить его работать на конкретном сокете

socket.setEnabledCipherSuites(ENABLED_SECURE_CIPHER_SUITES);

или для разъема Tomcat

 <Connector port="443" ciphers="..."/>

Проблема в том, что в приложении уже есть 5 мест, где я должен применить это ограничение вручную. Common SocketFactory, похоже, не помогает, поскольку не всегда возможно предоставить собственный SocketFactory для стороннего API или фреймворка. Можно ли как-то ввести это ограничение на уровне JRE, например, с помощью конфигурации провайдеров JCE или файла политики?

JRE: Oracle JRE 1.7.0_17

1 ответ

Решение

Ну, мне удалось заставить это работать. Спасибо EJP за указание в правильном направлении. Начиная с Java 1.7 в $JRE_HOME/lib/security/java.security есть два дополнительных свойства:

jdk.certpath.disabledAlgorithms=MD2

Алгоритмы управления для построения и валидации пути сертификации.

jdk.tls.disabledAlgorithms=MD5, SHA1, RC4, RSA keySize < 1024

Ограничения алгоритма JVM для обработки SSL/TLS, который я искал. Запись здесь совершенно очевидна; можно запретить определенные алгоритмы или ограничить размеры ключей. Оба свойства поддерживаются в Oracle JRE 7, Open JRE 7 и (что удивительно) IBM Java v7

Другие вопросы по тегам