Недавно У меня проблемы, потому что отсутствие энтропии и блокировка ввода-вывода в случайном порядке вызывали зависания. В 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, подтверждающую это. Вот цитата
Выберите первичный источник начальных данных для «SHA1PRNG» и Реализации SecureRandom "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: будет использоваться традиционный алгоритм активности системы / потока. Собственный PRNG: будет использоваться значение по умолчанию / dev / random. Если ни то, ни другое доступны, реализация будет отключена. "файл" - единственный поддерживаемый в настоящее время тип протокола.