数据库
首页 > 数据库> > 【随手记录】关于mysql的SSL证书登录

【随手记录】关于mysql的SSL证书登录

作者:互联网

下午连现场mysql库时候报错:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)

这错误出现原因是现场因为三级等保要求开启了mysql的ssl验证(MySQL5.7+默认是开启SSL连接),需要我们主动配置ssl证书信息或者明确指出不适用ssl

1、明确不使用ssl 加参数 useSSL=false

启动ssl增加性能损耗,如果不是为了等保等要求,确保安全情况下,可以不开启ssl:

jdbc:mysql://172.28.77.197:3306/admin?characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false

2、启用ssl

ssl.cert.path = /home/app/cert
ssl.config = true&verifyServerCertificate=true&requireSSL=true&clientCertificateKeyStoreUrl=file:${ssl.cert.path}/keystoremysql&clientCertificateKeyStorePassword=password456&trustCertificateKeyStoreUrl=file:${ssl.cert.path}/truststoremysql&trustCertificateKeyStorePassword=password123 
spring.datasource.url = jdbc:mysql://1.2.3.4:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=${ssl.config}

因为加上ssl认证后url太长了,所以提取了两个变量

ssl.cert.path表示生成的两个证书文件存放路径

ssl.config的value里根据证书生成的参数对应修改,如果不需要ssl认证值设置为false即可

3、查看mysql是否启用ssl

可以在mysql输入一下命令

 

show variables like '%ssl%';

 

have_openssl和have_ssl为yes表示mysql开启了ssl(这种没有强制)

4、强制用户启动ssl

select ssl_type from user where user = 'xx' ;

 如果结果为 ANY 则表示强制用户使用ssl

GRANT USAGE ON *.* TO 'xx'@'%' REQUIRE SSL;   

5、开启ssl配置

[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

修改完配置文件,重启mysql服务

标签:java,ssl,证书,SSL,cert,mysql,path,true
来源: https://www.cnblogs.com/whaleX/p/16265027.html