JavaWeb问题记录——SessionIdGeneratorBase.createSecureRandom
JavaWeb问题记录——SessionIdGeneratorBase.createSecureRandom
摘要:本文主要记录了在启动Tomcat时,出现的一个警告以及解决办法。
部分内容来自以下博客:
https://www.jianshu.com/p/30aa8e43a396
http://hongjiang.info/jvm-random-and-entropy-source
问题重现
启动Tomcat时,后台打印警告:
27-Nov-2019 17:26:48.057 警告 [main] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [280] milliseconds.
Java的版本是1.8,Tomcat的版本是9.0.29。
解决办法
修改Java的配置文件
在Java的安装目录下,找到 jre\lib\security 目录,打开 java.security 文件,找到如下配置:
securerandom.source=file:/dev/random
改为:
securerandom.source=file:/dev/./urandom
保存,然后重启Tomcat服务器即可,不建议使用这种方式,存在失败的情况。
修改Java运行环境的配置文件
在Tomcat的安装目录下,找到 bin 目录,打开 catalina.sh 文件,添加如下配置:
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
保存,然后重启Tomcat服务器即可,建议使用这种方式,这也是官方推荐的方式。
问题说明
从Tomcat的优化说起
在Tomcat的文档里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用了Entropy Source(熵源)的策略:
Tomcat 7+ heavily relies on SecureRandom class to provide random values for its session ids and in other places. Depending on your JRE it can cause delays during startup if entropy source that is used to initialize SecureRandom is short of entropy. You will see warning in the logs when this happens, e.g.:
<DATE> org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [5172] milliseconds.
意思是说,Tomcat在7以后的版本里十分依赖SecureRandom类生成的随机数来做为session ID,如果用于初始化SecureRandom的熵源是个短熵(熵不够用),那么就会报文章开头说的警告了。
熵源
熵的概念最早起源于物理学,用于度量物体的混乱程度。在信息论里面,熵用来描述不确定度。
熵源在类Unix系统中是一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器,与之相关的是 /dev/random 和 /dev/urandom 。
熵源 /dev/random 是一个阻塞发生器,在读取时, /dev/random 设备会返回小于熵池噪声总数的随机字节。 /dev/random 可生成高随机性的公钥或一次性密码本。若熵池空了,对 /dev/random 的读操作将会被阻塞,直到收集到了足够的环境噪声为止。
而熵源 /dev/urandom 则是一个非阻塞的发生器,是 /dev/random 的一个副本,它会重复使用熵池中的数据以产生伪随机数据。这表示对 /dev/urandom 的读取操作不会产生阻塞,但其输出的熵可能小于 /dev/random 输出的熵。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
Java中的相关配置
在Java的安装目录下,找到 jre\lib\security 目录,打开 java.security 文件,里面提到了SecureRandom类使用SHA1PRNG算法或NativePRNG算法生成随机数。
在类Unix系统(比如Solaris/Linux/MacOS)上它们是基于某种特殊的熵收集设备作为种子来生成的随机数,如前面提到的 /dev/random 。
在Windows系统上,如果指定的是 file:/dev/random 或 file:/dev/urandom ,那么会使用微软的CryptoAPI作为SHA1PRNG算法的种子产生器。
通过配置 java.security.egd 和 securerandom.source 可以指定使用的熵收集设备,配置 java.security.egd 会覆盖 securerandom.source 。
官方建议
在Tomcat的文档里也给出了建议,那就是在Java的运行环境里通过设置 java.security.egd 系统属性来使用非阻塞的熵源:
-Djava.security.egd=file:/dev/./urandom
至于为什么是 /dev/./urandom ,而不是 /dev/urandom ,这源于Java的一个bug。大意是 /dev/urandom 在某些情况下可能还是最终会转换成调用 /dev/random 。
JavaWeb问题记录——SessionIdGeneratorBase.createSecureRandom的更多相关文章
- Linux中tomcat启动很慢,SessionIdGeneratorBase.createSecureRandom耗时5分钟
通常情况下,tomcat启动只要2~3秒钟,突然有一天,tomcat启动非常慢,要花5~6分钟,查了很久,终于在这篇文章找到了解决方案,博主牛人啊. 原文参见:http://blog.csdn.NET ...
- WARNING [main] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [] milliseconds.
编译安装tomcat-native和tomcat-deamon以后,发现toomcat启动很慢,好久才有响应.以下日志供参考: 11-Sep-2017 12:19:28.102 INFO [main] ...
- tomcat启动时SessionIdGeneratorBase.createSecureRandom耗时5分钟的问题
通常情况下,tomcat启动只要2~3秒钟,突然有一天,tomcat启动非常慢,要花5~6分钟,查了很久,终于在这篇文章找到了解决方案,博主牛人啊. 原文参见:http://blog.csdn.net ...
- JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码
JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...
- tomcat启动时间5分钟左右org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [342,445] milliseconds.
org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance ...
- javaweb初学记录
原文 链接 http://blog.csdn.net/iojust/article/details/52429805 - ---热情依旧 - 环境搭建: - jdk环境配置 jdk下载: http:/ ...
- JavaWeb学习记录(十四)——商城购物之字符串拼接实现最近浏览商品和购物车的功能
一.字符串拼接的工具类 package blank.util; import java.util.Iterator;import java.util.Map;import java.util.Set; ...
- JavaWeb学习记录(七)——MVC操作数据库增删改查与分页功能
一.分页工具类 package blank.util;import java.util.List; import org.springframework.jdbc.core.JdbcTemplate; ...
- JavaWeb开发记录全过程--(1)环境配置
一. 开发工具:idea 理由:根据idea 如何连接服务器,可以直接在idea上连接服务器 安装:根据IntelliJ IDEA 下载安装(含注册码),进行非常规手段使用idea 二.分析问题: # ...
随机推荐
- 优先队列与TopK
一.简介 前文介绍了<最大堆>的实现,本章节在最大堆的基础上实现一个简单的优先队列.优先队列的实现本身没什么难度,所以本文我们从优先队列的场景出发介绍topK问题. 后面会持续更新数据结构 ...
- Android设置EditText不可编辑
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/224 禁用EditText 这个其实很简单,最简单的一种方 ...
- 【Dos】复制指定文件夹下所有文件到另外指定文件夹下
bat代码如下: @echo off @set /p fromFile=from: @set /p toFile=to: rem 找到所有文件 dir /b /s %fromFile%\ *.gz & ...
- React的世界观及与Vue之比较
写在前面:本文谈论的是主观的个人感受,不追求立场的“客观.公正”,因此我下面所说的很可能是错的,欢迎交流指正. 我学习前端时,跟大部分beginner一样,学的第一个框架是Vue,入职后也一直写Vue ...
- RabbitMQ 备份交换机(alternate-exchange)介绍
RabbitMQ之备份交换机(alternate-exchange) 1.备份交换器,AlternateExchange(AE) 备份交换器是为了实现没有路由到队列的消息,声明交换机的时候添加属性al ...
- mysql 排它锁之行锁、间隙锁、后码锁
MySQL InnoDB支持三种行锁定 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. 间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙不变.间隙锁是针对事务 ...
- FineUICore基础版部署到docker实战
FineUI用了好多年,最近出了FineUICore版本,一直没时间是试一下docker,前几天买了一个腾讯云服务器,1核2g,装了centos7.6,开始的时候主要是整个个人博客,在腾讯云安装了宝塔 ...
- Python 3.7的安装过程
百度云Pyhton3.7-32位安装包: 链接:https://pan.baidu.com/s/1P5Egkl2KNt_DjhiFaDzqsg提取码:5171 百度云Pyhton3.7-64位安装包: ...
- 团队项目之Scrum4
小组:BLACK PANDA 时间:2019.11.24 每天举行站立式会议 提供当天站立式会议照片一张 2 昨天已完成的工作 2 基本实现web富文本编辑功能 后台的编辑接口已经基本完成,还有一些b ...
- QT--电子时钟
QT--电子时钟 简介: 使用了绘图事件.定时事件,有两个窗口,一个窗口用于设置时间(主窗口),一个是时钟窗口 1.主窗口 menu.h文件: #ifndef MENU_H #define MENU_ ...