2016-04-01 7 views
3

Я пытаюсь увеличить размер ключа DH с 1024 бит до 2048 бит, согласно этому вопросу: How to expand DH key size to 2048 in java 8.Java JVM Hotspot ephemeralDHKeySize

Однако, похоже, что это не сработает. Соответствующая информация:

java -version 
java version "1.8.0_45" 
Java(TM) SE Runtime Environment (build 1.8.0_45-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) 

И

System.out.println(Security.getProperty("jdk.tls.ephemeralDHKeySize")); 
2048 

Однако, если подключить к этому серверу от клиента, он использует 1024-бит:

openssl s_client -connect server:port -cipher "EDH" 2>/dev/null | grep -ie "Server .* key" 
Server Temp Key: DH, 1024 bits 

Любая идея, что еще я могу сделать ?

+0

Просто слепое предположение: возможно, размер ключа ограничен политикой безопасности? Вы пытались установить политику неограниченной прочности? http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html – DevCybran

+0

На какой платформе вы работаете? Какую версию openssl вы используете для подключения? ('openssl version' скажет вам) –

+0

Платформа Redhat 6, версия openssl для проверки, я думаю, 1.0.2g – Michael

ответ

1

Я обеспокоен тем, что вы звоните Security.getProperty("jdk.tls.ephemeralDHKeySize"), чтобы проверить размер ключа DH. Недвижимость jdk.tls.ephemeralDHKeySize не является Охрана собственности, это Система собственности, которая заставляет меня подозревать, что вы не устанавливаете его должным образом. Если вы настроите это так:

Security.setProperty("jdk.tls.ephemeralDHKeySize", "2048"); // don't do this 

то это не сработает. Попробуйте либо прохождение:

-Djdk.tls.ephemeralDHKeySize=2048 

в командной строке программы, или установить его как это:

System.setProperty("jdk.tls.ephemeralDHKeySize", "2048"); 

в коде.

+2

Если вы установили код, убедитесь, что это до первой операции SSL - до того, как 'sun.security.ssl.ServerHandshaker' загружен в класс, потому что свойство проверяется и кэшируется. –

+0

@Pete Clark, хм интересно. Я на самом деле не устанавливаю его в коде, я установил его в файле «java.security», который можно найти в JavaHome/jre/lib/security. Тогда, если я делаю «System.getProperty», он не находит значение (null). Он находит это только тогда, когда я делаю «Security.getProperty». Итак, в основном вы думаете, что установка его через файл java.security неверна? – Michael

+0

@Pete Clark, решила! Передача -Djdk и т. Д.с командой работал. Любая идея, почему свойства java.security не работают? Я думаю, что эти настройки применимы ко всей JVM, так что мне не нужно устанавливать их отдельно для каждого процесса, который запускается внутри этой JVM? – Michael

Смежные вопросы