最近,我遇到了麻煩,因為缺乏熵和阻塞 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 中找到了文件證實了這一點。這是報價
選擇「Sun」提供者中「SHA1PRNG」和「NativePRNG」SecureRandom 實現的種子資料的主要來源。 (其他 SecureRandom 實作也可能使用此屬性。)
在類別 Unix 系統(例如 Solaris/Linux/MacOS)上,「NativePRNG」和「SHA1PRNG」實作從特殊裝置檔案(例如 file:/dev/random)取得種子資料。
在 Windows 系統上,指定 URL「file:/dev/random」或「file:/dev/urandom」將為 SHA1PRNG 啟用本機 Microsoft CryptoAPI 播種機制。
預設情況下,會嘗試使用「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.