Vor kurzem hatte ich Probleme, weil der Mangel an Entropie und die Blockierung von Rand-IO zu Hängern führten. Unter Linux kann ich Folgendes tun:
JAVA_OPTS=-Djava.security.egd=/dev/urandom ./myStartScript.sh
Was ist das Äquivalent unter Windows? Wir führen die App sowohl auf Linux- als auch auf Windows-Servern aus, Linux-Server mit OpenJDK JRE und Windows-Server mit Oracle JRE.
Ich habe viele Vorschläge dazu gefunden CryptGenRandom
, aber wie kann ich das auf JVM-Ebene an die App weitergeben?
Antwort1
Ich habe eine Dokumentation in jre/lib/security/java.security gefunden, die dies bestätigt. Hier ist das Zitat
Wählen Sie die primäre Quelle der Seed-Daten für die SecureRandom-Implementierungen „SHA1PRNG“ und „NativePRNG“ im „Sun“-Anbieter. (Andere SecureRandom-Implementierungen verwenden diese Eigenschaft möglicherweise ebenfalls.)
Auf Unix-ähnlichen Systemen (z. B. Solaris/Linux/MacOS) beziehen die Implementierungen „NativePRNG“ und „SHA1PRNG“ Seed-Daten aus speziellen Gerätedateien wie file:/dev/random.
Auf Windows-Systemen wird durch die Angabe der URLs „file:/dev/random“ oder „file:/dev/urandom“ der native Microsoft CryptoAPI-Seeding-Mechanismus für SHA1PRNG aktiviert.
Standardmäßig wird versucht, das durch die Sicherheitseigenschaft „securerandom.source“ angegebene Gerät zur Entropieerfassung zu verwenden. Wenn beim Zugriff auf die angegebene URL eine Ausnahme auftritt:
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.