Recentemente, tive problemas porque a falta de entropia e o bloqueio de IO causaram travamentos. No Linux, posso fazer o seguinte:
JAVA_OPTS=-Djava.security.egd=/dev/urandom ./myStartScript.sh
Qual é o equivalente no Windows? Estamos executando o aplicativo em servidores Linux e Windows, servidores Linux usando OpenJDK JRE e servidores Windows usando Oracle JRE.
Encontrei muitas sugestões sobre CryptGenRandom
, mas como posso passar isso para o aplicativo no nível da JVM?
Responder1
Encontrei documentação em jre/lib/security/java.security que confirma isso. Aqui está a citação
Selecione a fonte primária de dados iniciais para as implementações SecureRandom "SHA1PRNG" e "NativePRNG" no provedor "Sun". (Outras implementações de SecureRandom também podem usar esta propriedade.)
Em sistemas do tipo Unix (por exemplo, Solaris/Linux/MacOS), as implementações "NativePRNG" e "SHA1PRNG" obtêm dados iniciais de arquivos de dispositivos especiais, como file:/dev/random.
Em sistemas Windows, especificar as URLs "file:/dev/random" ou "file:/dev/urandom" ativará o mecanismo de propagação nativo do Microsoft CryptoAPI para SHA1PRNG.
Por padrão, é feita uma tentativa de usar o dispositivo de coleta de entropia especificado pela propriedade de segurança "securerandom.source". Se ocorrer uma exceção ao acessar o URL especificado:
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.