在vps上部署tomcat后,如果不使用tomcat自带的管理界面,那么每次重新部署网站都得重启tomcat,而由于Tomcat 7/8都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom ,导致每次在生成随机数时要花费几百秒,而平时我的vps也没啥东西运行,所以熵池(entropy pool)的填充速度也是十分慢,最长的一次启动更花了我300多s。(每次在vps重启tomcat都得刷会微博,然后忘了干正事)

04-May-2017 20:58:16.765 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 303427 ms

通过watch cat /proc/sys/kernel/random/entropy_avail查看,平时的池大小都是在200左右浮动,更极端情况保持了很久的20,这样势必会导致tomcat从/dev/random读取随机数时产生了阻塞。通过这样的特点,一些攻击也可以通过这些来实现,不断的使用需要读取随机数的地方消耗系统的熵池,造成系统的阻塞。虽然说使用/dev/urandom伪随机数生成设备也能在熵池较小的情况下完成随机数的生成,但是并没有真·随机数来的安全(恩。大概)。 Centos下使用

yum install rng-tools

安装服务之后使用

systemctl enable rngd.service

启动rngd服务,

systemctl start rngd.service

systemctl status rngd.service查看rngd服务状态,启动失败可以

cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
vim /etc/systemd/system/rngd.service

修改ExecStart=ExecStart=/sbin/rngd -f -r /dev/urandom 重启服务

systemctl daemon-reload
systemctl restart rngd.service

不过rngd -v我这下面还是显示

Unable to open file: /dev/tpm0
can't open any entropy source
Maybe RNG device modules are not loaded

在Arch的wiki上查到这篇文章here 但是对于我来说并没有啥卵用