Недавно я столкнулся с проблемами, поскольку отсутствие энтропии и блокировка rand IO вызывали зависания. На Linux я могу сделать следующее:
JAVA_OPTS=-Djava.security.egd=/dev/urandom ./myStartScript.sh
Какой эквивалент на Windows? Мы запускаем приложение на серверах Linux и Windows, серверах Linux с использованием OpenJDK JRE и серверах Windows с использованием Oracle JRE.
Я нашел много предложений по поводу CryptGenRandom
, но как мне передать это приложению на уровне JVM?
решение1
Я нашел документацию в jre/lib/security/java.security, которая это подтверждает. Вот цитата
Выберите основной источник начальных данных для реализаций SecureRandom «SHA1PRNG» и «NativePRNG» в поставщике «Sun». (Другие реализации SecureRandom также могут использовать это свойство.)
В Unix-подобных системах (например, Solaris/Linux/MacOS) реализации «NativePRNG» и «SHA1PRNG» получают начальные данные из специальных файлов устройств, таких как file:/dev/random.
В системах Windows указание URL-адресов «file:/dev/random» или «file:/dev/urandom» включит собственный механизм инициализации Microsoft CryptoAPI для SHA1PRNG.
По умолчанию делается попытка использовать устройство сбора энтропии, указанное свойством безопасности "securerandom.source". Если при доступе к указанному URL-адресу возникает исключение:
SHA1PRNG: the traditional system/thread activity algorithm will be used. NativePRNG: a default value of /dev/random will be used. If neither are available, the implementation will be disabled. "file" is the only currently supported protocol type.