创建SecureRandom过慢问题


Linux 环境Tomcat启动项目 创建SecureRandom过慢,报如下警告信息

 o.a.c.util.SessionIdGeneratorBase        : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [28,420] milliseconds.

这个问题很多人遇到过,tomcat的wiki里面还单独列出来作为加速启动的一个方面: https://wiki.apache.org/tomcat/HowTo/FasterStartUp#Entropy_Source

tomcat7/tomcat8的session id的生成主要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是SHA1PRNG

在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数据,在linux上,与之相关的是/dev/random/dev/urandom ** /dev/random **

在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。
/dev/random可生成高随机性的公钥或一次性密码本。
若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止

** /dev/urandom 则是一个非阻塞的发生器 **

dev/random的一个副本是/dev/urandom (”unlocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据。
这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。
它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

** 解决方法:**

采用非阻塞的熵源(entropy source)

系统属性:
-Djava.security.egd=file:/dev/./urandom

文件修改:$JAVA_HOME/jre/lib/security/java.security
securerandom.source=file:/dev/urandom

文章作者: Gumihoy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gumihoy !
评论
 上一篇
MongoDB安装 MongoDB安装
2018-12-26 Gumihoy
下一篇 
Redis开发规范 Redis开发规范
阿里云Redis开发规范一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1
2018-12-06
  目录