由于SecureRandom,在Tomcat 7.0.57上启动缓慢

我在CentOS 6.6 32位和openJDK7上使用Tomcat 7.0.57。 当我在服务器(生产环境)上启动14个不同的Tomcat实例时,其中许多实例需要花费太多时间才能启动。

这是启动日志的一部分,它告诉我在哪里一直在使用

Jan 28, 2015 2:49:41 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [199,620] milliseconds. 

这个问题的最佳实践/解决方案是什么?

谢谢!

安全随机调用可能是阻塞的,因为没有足够的熵来在/ dev / random中提供它们。

如果你有这条线

 securerandom.source=file:/dev/random 

在/jre/lib/security/java.security中,将此更改为urandom可能会改进(虽然这可能已经是默认设置)。

或者,有一些关于如何在这里喂池的建议

https://security.stackexchange.com/questions/89/feeding-dev-random-entropy-pool

我遇到了同样的问题 ,即tomcat启动速度太慢。 我在DigitalOcean上关注这篇文章并安装了hasged而不是使用urandom。

hasged是一种不会在安全方面妥协的解决方案。

hasged允许基于处理器上的代码执行时间的变化来生成随机性。 由于一段代码几乎不可能花费相同的执行时间,即使在同一硬件上的相同环境中,运行单个或多个程序的时间也应该适合种子随机源。 在反复执行循环后,使用处理器的时间戳计数器(TSC)中的差异,伪造的实现会使系统的随机源(通常为/ dev / random)变为种子

如何安装hasged

请按照本文中的步骤操作。 https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

我在这里贴了它

根据Henry的回答,这里有一些调整tomcat的具体说明

创建/etc/tomcat/fastersecurerandom.properties

 securerandom.source=file:/dev/urandom 

编辑/etc/tomcat/tomcat.conf JAVA_OPTS

 JAVA_OPTS="-Djava.security.properties=/etc/tomcat/fastersecurerandom.properties" 

仅供参考,我发现我无法使用JAVA_OPTS="$JAVA_OPTS ..."设置多个JAVA_OPTS ,尽管有注释掉的例子。 根据/var/log/messages的警告,可怜的旧混淆tomcat 7无法启动

在不同的版本/风格上,您可以找到最适合为tomcat设置环境变量的位置的变体。 如果它们正在生效,调试的最佳方法是检查运行的命令,如下所示:

 $ ps aux | grep java tomcat 4821 4.7 13.9 2626888 263396 ? Ssl 22:31 0:23 /usr/lib/jvm/jre/bin/java -DJENKINS_HOME=/opt/jenkins/ -Xmx512m -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Djava.security.properties=/etc/tomcat/fastersecurerandom.properties -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start 

我更改了/jre/lib/security/java.security,如下:securerandom.source = file:/ dev /./ urandom