我遇到的问题是,在使用SSL时java很慢。解决方案是在命令行中将
-Djava.security.egd=file:/dev/./urandom添加到java。由于我有多个JVM,我不想修改每个JVM以包含此字符串,因此希望将其添加到文件
$JAVA_HOME/jre/lib/security/java.security
现在,java.security文件已经包含
securerandom.source=file:/dev/urandom
有两个问题:
答案 0 :(得分:5)
这实际上是在1.3或1.4天内引入JVM的黑客攻击
http://bugs.sun.com/view_bug.do?bug_id=4705093
http://bugs.sun.com/view_bug.do?bug_id=6202721
基本问题是,在本机JVM代码中,他们硬编码/dev/urandom
实际使用/dev/random
来尝试确保足够的熵。由于/dev/urandom
应该保证不会阻止,如果没有足够的熵,这会产生阻塞的意外后果。
硬编码专门针对字符串/dev/urandom
,因此提供解析为相同但不匹配的内容会导致所需的行为。如果您对/dev/./urandom
进行编码,则会绕过硬编码别名并转到预期的urandom
熵源。
答案 1 :(得分:0)
我不建议使用urandom进行SSL。你的问题是你的机器没有足够的熵,使用urandom并不能解决这个问题。假设您在Linux上,您可以通过以下方式检查可用的熵:
cat /proc/sys/kernel/random/entropy_avail
如果您使用的是具有hw随机数生成器的计算机,则最可能需要安装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是否支持此功能。