java慢:熵相关问题

时间:2013-12-01 17:27:41

标签: java tomcat jboss weblogic

我遇到的问题是,在使用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

有两个问题:

  1. “/ dev / urandom”为何以及如何与“/dev/./urandom”不同。为什么java不接受“/ dev / urandom”
  2. 对于我运行的JVM,如何判断他们是否使用了正确的urandmon设备(vs random)

2 个答案:

答案 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是否支持此功能。