Tomcat 7中更快的随机生成器

kay*_*ahr 18 java tomcat

我有问题,Tomcat 7在启动时非常慢.我在日志文件中找到了这个:

INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [12,367] milliseconds.
Run Code Online (Sandbox Code Playgroud)

安全性很重要,当然,但不是在我的开发机器上.我完全可以使用标准的快速随机数发生器.所以我不需要这个非常慢的SecureRandom实现.

问题是:如何禁用它?搜索解决方案,但只找到一些关于randomClass可以设置为的属性的弃用信息java.util.Random.我还发现这个属性secureRandomClass现在似乎在Tomcat 7中被命名了.我试图将它设置为java.util.Random但是这会失败,因为Tomcat 7将对象强制转换为java.util.SecureRandom(并且还记录了指定的类必须扩展java. util.SecureRandom,因此不再可能使用java.util.Random.)

那么我怎样才能摆脱这个非常慢的随机数生成器启动,以便我的开发tomcat尽可能快地启动/重启?

lev*_*vsa 13

根据TomCat Wiki,您可以使用非阻塞熵源:

"有一种方法可以通过设置以下系统属性来配置JRE以使用非阻塞熵源:-Djava.security.egd=file:/dev/./urandom"


小智 6

您可能需要在服务器上安装Haveged

Tomcat 在启动时使用SecureRandom生成安全ID,而SecureRandom使用/ dev / random/ dev / urandom生成随机数。

在某些无头linux环境中,/ dev / random熵池可能产生低质量的随机性,并且对生成随机数的响应非常慢。

有一篇很好的文章介绍了Haveged如何解决此问题。

如何为使用云服务器设置附加熵

  • 安装Haveged为我解决了这个问题。 (2认同)

mik*_*era 2

您可能需要修补 Tomcat。

尽管作为一种黑客,您总是可以尝试使用包装标准 java.util.Random 实例的东西来扩展 java.util.SecureRandom......这至少可以解决强制转换问题。

另一种想法......减速可能是由于熵池耗尽所致?您可能想尝试将更多的熵放入池中,这可能会使其运行得非常快。