使用SSL方式建连报错或阻塞
问题现象
JDBC使用SSL方式建立连接时,会在客户端获取强随机数,建立连接过程中可能出现以下的报错信息:
场景1:如下报错:
场景2:建连阻塞。如果连接串中配置了loginTimeout后,会报Connection attempt timed out,如果不配置该参数,会一直阻塞。
原因分析
客户端环境随机数产生的速度太慢,无法满足产品要求,熵源不足,导致服务启动失败。当前已知在一些Linux环境中存在此问题。
处理方法
方法1:启动客户端环境中的haveged服务,增加系统熵池熵值以提高读取随机数的速度。启动命令为:
systemctl start haveged
方法2:调整客户端jdk配置
打开$JAVA_PATH/jre/lib/security/java.security文件,修改以下两个配置项:
securerandom.source=file:/dev/./urandom securerandom.strongAlgorithms=NativePRNGNonBlocking:SUN
方法2的本质是在获取强随机数时,使用伪随机数代替,减少需要消耗的熵值。会影响客户端所有使用该jdk的应用,在获取强随机数时会使用伪随机数代替。