【问题标题】:java slow : entropy related issuejava慢:熵相关问题
【发布时间】:2013-12-17 09:03:40
【问题描述】:

我遇到了一个问题,即通过 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 设备(相对于随机设备)

【问题讨论】:

  • /dev/./urandom/dev/urandom 是同一个路径,没有区别。
  • 应该没有,但显然有
  • 是的,刚刚得出了同样的结论!错误 6202721 对此进行了解释。

标签: java tomcat jboss weblogic


【解决方案1】:

这实际上是在 1.3 或 1.4 天内引入 JVM 的 hack

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 熵源。

【讨论】:

    【解决方案2】:

    在大多数情况下,使用 /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 是否支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 2011-07-31
      • 2013-01-09
      相关资源
      最近更新 更多