В последнее время я столкнулся с проблемами, потому что отсутствие энтропии и блокировка ввода-вывода рандома вызывали зависания. В Linux я могу делать следующее:
JAVA_OPTS=-Djava.security.egd=/dev/urandom ./myStartScript.sh
Что эквивалентно в Windows? Мы запускаем приложение как на серверах Linux, так и на Windows, серверах Linux с использованием OpenJDK JRE и серверах Windows с использованием Oracle JRE.
Я нашел много предложений по CryptGenRandom
, но как передать это в приложение на уровне JVM?
Я нашел документацию в 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.