我遇到了一个问题,即通过 SSL 使用 java 时速度很慢。解决办法是在命令行java中添加
-Djava.security.egd=file:/dev/./urandom。由于我有多个 JVM,我不想修改每个 JVM 以包含此字符串,因此想将其添加到文件
$JAVA_HOME/jre/lib/security/java.security
现在,java.security文件已经包含
securerandom.source=file:/dev/urandom
有两个问题:
这实际上是 1.3 或 1.4 天时引入 JVM 的 hack。
基本问题是,在本机 JVM 代码中,他们对
/dev/urandom
进行硬编码以实际使用 /dev/random
来尝试确保足够的熵。由于 /dev/urandom
应该保证不会阻塞,因此如果没有足够的熵可用,就会产生阻塞的意外后果。
硬编码专门针对字符串
/dev/urandom
,因此提供解析为相同内容但不匹配导致所需行为的内容。如果您编码 /dev/./urandom
,您将绕过硬编码的别名并获得预期的 urandom
熵源。
在大多数情况下使用 /dev/urandom (非阻塞)就可以了。就我个人而言,我会确保将一些硬件随机数生成器配置为正数以具有足够的熵(见下文)。
如果您必须使用 /dev/random (阻塞)并且无法阻塞,那么您应该确保始终有足够的熵。解决此问题的方法是配置硬件随机数生成器。
假设您在 Linux 上,您可以使用以下命令检查可用熵:
cat /proc/sys/kernel/random/entropy_avail
如果您的计算机具有硬件随机数生成器,您很可能需要安装 rngd。您可以通过发出以下命令来检查您的CPU是否有:
cat /proc/cpuinfo
寻找名为 rand 的标志。您还可以检查文件 /dev/hwrng 是否存在。您可能已经/想要加载相应的模块:
ls /lib/modules/*/kernel/drivers/char/hw_random
对我来说这是:
sudo modprobe tpm-rng
使其永久化:
echo tpm-rng | sudo tee -a /etc/modules
如果您碰巧使用的是 Ubuntu/Debian,只需安装 rng-tools 软件包。
sudo aptitude install rng-tools
如果您在安装 rng-tools 之前和之后检查熵,您应该会看到显着增加。
以下命令应显示可用的熵源:
sudo rngd -f -r /dev/hwrng -v
请注意,如果您需要更好的安全性,则需要混合多个熵源。不确定 rng-tools 支持这个。