【随手记录】关于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服务