Ви не можете цього зробити з keytool. По-перше, keytool
взагалі не підтримує DH. По-друге, keytool
не генерує параметри самостійно для жодного алгоритму, лише приватну клавішу / ключ. По-третє, коли keytool
генерується ключ, він також генерує самопідписаний cert (який іноді згодом замінюється "справжнім", виданим сертифікатом CA) і неможливо генерувати самопідписаний cert для 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 біт, що більшість органів вважає досить сильним, навіть якщо слабкого сайту.org немає, і дозволяє уточнити більше, див. 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-предотвращать-атаку . Зауважте, що якщо у вас є Java- клієнти до Java 8, вони вийдуть з ладу, якщо сервер використовує DHE понад 1024 біт. Я не знаю жодних інших клієнтів, які мають цю проблему, але протестуйте своїх, перш ніж приступити до цієї зміни.
Увімкнути ECDHE. JSSE в Java 7 і пізніших версіях реалізує ECDHE, який не підлягає попередньому обчисленню, як DHE, (як правило), використовуючи P-256, що більш ніж досить сильно. (Хоча деякі люди не довіряють жодній кривій NIST ECC, оскільки на NIST взагалі впливає NSA, хоча жоден відкритий код, про який я знаю, не показав проблеми в кривих ECC.) Java 6 насправді має частину JSSE для ECDHE але це увімкнено лише у тому випадку, якщо в JVM є крипто "постачальник" для примітивів ECC, чого Java 6 не робить. bcprov - * - jdk15on від http://www.bouncycastle.org/ - постачальник JCE для ряду крипто-примітивів Java, включаючи ECC, тому якщо ви додасте банку до свого 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 та (усі) "ЕКСПОРТ", якщо вони є (Java 6). Це означає, що браузери та клієнти, які не роблять ECHDE, будуть застрягати з простою RSA і без Forward Secrecy, але принаймні вони мають "поточну" таємницю. Я не пам'ятаю точно, але я думаю, що конфігурація 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 для їх налаштування.