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 二.分析问题: # ...
随机推荐
- 起言-----UE4学习方法
1.bilibili 2.官网教程 3.我觉得以上两个就够了 官方文档链接 https://docs.unrealengine.com/ 官网在线视频链接 https://learn.unrealen ...
- 敏捷:你能区分DevOps中的“集成、部署、交付、上线、发布”吗?
在DevOps中,你可能经常会听到类似这样的一些话: 功能还没集成进来. 功能还没部署上去. 功能还没交付. 功能还没上线. 功能还没发布. 请问,以上“集成”.“部署”. “交付”.“上线”.“发布 ...
- React Native-ios环境的搭建
要在mac系统上搭建RN环境: 一.安装Homebrew.它是一款Mac OS平台下的软件包管理工具. 详见Homebrew的安装这篇文章. 二.安装node和watchman,用Homebrew在命 ...
- java开发两三事(2)-java多数据源+java8stream与LocalDateTime时间差
1. 场景描述 最近在工作中碰到的几个问题,有点坑,记录下,遇到相同或类似问题的朋友可以参考下. 2. 解决方案 2.1 拼接sql后,多数据源执行 采用Spring+DruidDataSource数 ...
- C# sync/async 同步/异步
同步方法 Console.WriteLine($")} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}******* ...
- Github原生CI/CD,初尝Github Actions
Github 原生 CI/CD,初尝 Github Actions Intro Github 目前已经推出了自己的 CICD 服务 -- Github Actions,而且比微软的 Azure Dev ...
- 更改Android studio中SDK,AVD的默认路径
对于大部分首次下载android studio开发android的人来说, 由于Android Studio将会默认把SDK,AVD下载到我们的C盘,造成大量内存的占用,那么如何更改SDK,AVD的路 ...
- 腾讯 Techo 开发者大会首发来袭!云原生中间件技术实践等你来!
腾讯 Techo 开发者大会是由腾讯云发起的面向全球开发者和技术爱好者的年度盛会,2019 年 11 月 6 日 - 7 日将在北京嘉里大酒店首次召开. 作为一个专注于前沿技术研讨的非商业大会,Tec ...
- 使用shell脚本查看数据库负载情况
原创 Oracle 作者:jeanron100 时间:2014-05-23 08:56:26 8912 2 平时在查看数据库的问题时,会有种迷茫的感觉,如果没有任何人反馈问题,基本上没有主动查找问 ...
- Python通过pymysql连接数据库并进行查询和更新SQL方法封装
1.通过pymysql连接数据库并进行数据库操作2.查询数据3.更新修改SQL方法封装 import pymysql.cursors import json class OperationMysql: ...