最近、エントロピー不足と 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.