Вы не можете сделать это с помощью keytool. Во-первых, keytool
не поддерживает DH вообще. Во-вторых, keytool
не генерирует параметры самостоятельно для какого-либо алгоритма, только частная клавиша / пара ключей. В-третьих, когда keytool
генерируется пара ключей, он также генерирует самоподписанный сертификат (который иногда впоследствии заменяется «настоящим» выданным СА сертификатом), и невозможно создать самоподписанный сертификат для DH, поскольку DH не подписывает. Вы можете написать очень простую (около 10 строк) Java-программу для генерации параметров DH. Но это, вероятно, не принесет вам пользы, потому что:
В любом случае Java здесь не принимает параметры DHE. JbossWS (веб-сервер Jboss, позже Wildfly) является форком Tomcat и обычно использует реализацию Java SSL / TLS, JSSE. До Java 7 JSSE использует свои собственные параметры DHE, которые являются 768-битными, что недопустимо слабо. (За исключением комплектов EXPORT, где JSSE подчиняется требованию RFC для DH-512, который полностью нарушен, но затем комплекты EXPORT по своему дизайну полностью нарушены и отключены по умолчанию в Java 7 и выше.) Java 8 JSSE позволяет вам контролировать размер параметров DHE, но не фактическое значение.
Ваши (некоторые перекрывающиеся) варианты:
Используйте Java 8. JSSE в Java 8, но не ранее, по умолчанию использует DHE равным 1024 битам, что большинство авторитетных организаций считает достаточно сильным, даже если и не слабый, и позволяет указать больше, см. Https://docs.oracle.com. /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys и для фона /programming/30352105/how-to-set-custom-dh-group-in-java -Slengine-to-предотвращать-logjam-атаку . Обратите внимание, что если у вас есть клиенты Java до Java 8, они потерпят неудачу, если сервер использует DHE более 1024 бит. Я не знаю других клиентов, у которых есть эта проблема, но проверьте своих, прежде чем совершать эти изменения.
Включить ECDHE. JSSE в Java 7 и более поздних версиях реализует ECDHE, который не подлежит предварительному вычислению, как DHE, (обычно) с использованием P-256, что более чем достаточно. (Хотя некоторые люди не доверяют ни одной из кривых NIST ECC, потому что NSA в целом влияет на NSA, хотя ни один из открытых источников, о которых я знаю, не обнаружил проблемы именно в кривых ECC.) В Java 6 фактически есть часть JSSE для ECDHE но он включается только в том случае, если JVM имеет крипто-провайдера для примитивов ECC, чего нет в Java 6. bcprov - * - jdk15on из http://www.bouncycastle.org/ является поставщиком JCE для ряда криптографических примитивов Java, включая ECC, поэтому, если вы добавляете jar в свой файл JRE/lib/ext
и добавляете org.bouncycastle.jce.provider.BouncyCastleProvider
его в список JRE/lib/security/java.security
(или делаете подходящееSecurity.add/insertProvider()
где-то рано в вашем коде) Java 6 может сделать ECDHE. Конечно, стоит ли вам использовать Java 6 - это вопрос сам по себе.
Несколько лет назад поддержка ECDHE в браузерах и других клиентах была ненадежной, но сегодня AFAIK все современные браузеры поддерживают ее и предпочитают ее DHE - то есть браузер привет перечисляет комплекты ECDHE до того, как комплекты DHE так что если сервер реализует оба, он должен выбрать ECDHE. Не браузерные клиенты, возможно, нет; проверить, чтобы быть уверенным.
Отключить DHE. Вы можете настроить список шифров в атрибуте Connector, чтобы исключить DHE-шифры; при этом вы также исключаете staticDH и staticECDH, которые бесполезны, и (один) DES и (все) «EXPORT», если присутствует (Java 6). Это означает, что браузеры и клиенты, которые не используют ECHDE, будут зависеть от обычного RSA и без прямой секретности, но, по крайней мере, у них будет «текущая» секретность. Я не помню точно, но я думаю, что конфигурация 5.1 Connector была еще где-то как $server/deploy/jbossweb/server.xml
.
Попробуй родной. Tomcat, с которого, как я уже сказал, начал JbossWS, имеет опцию для реализации HTTPS (SSL / TLS), используя «нативный» или «APR», который на самом деле является OpenSSL внутри, а не JSSE. Я имел неоднозначный успех в том, чтобы заставить эту опцию работать на JbossWS, и не вспоминаю о 5.1. Если ваш JbossWS имеет работоспособную TC-родной вариант, и если он может обрабатывать настройки параметров DH, а затем использовать OpenSSL для формирования параметров DH и инструкции JbossWS-нативной настроить их.