MYSQL SSL配置与使用

mysql5.6只支持TLS1.0
mysql5.7支持TLS1.1

1.登录后使用此命令查看是否开启ssl
SHOW VARIABLES LIKE ‘%ssl%’;

2.若未开启,制作证书,修改/etc/my.cnf文件,在mysqld标签下添加:
ssl-ca=/root/ca/ca.pem
ssl-cert=/root/ca/server.pem
ssl-key=/root/ca/key.pem

3.重启mysql服务器,再次使用1命令查看,应该显示已经开启ssl

4.查看当前mysql服务器支持的ssl版本,必须使用SSL登录的模式后才能使用此命令查看,否则为空
“\s”:命令可以查看当前连接是否是ssl连接
SHOW GLOBAL STATUS LIKE ‘Ssl_version’;
SHOW GLOBAL STATUS LIKE ‘Ssl_version’\G
SHOW GLOBAL STATUS LIKE ‘Ssl_cipher_list’\G

5.添加一个测试账号
grant all on . to ‘ssl_test’@’%’ identified by ‘test@1234’ require SSL;

6.配置账号登录模式
单向认证(必须使用SSL登录,不验证证书):
update user set ssl_type=‘ANY’ where user=‘ssl_test’;
flush privileges;
双向认证(必须使用SSL登录,并且验证证书):
update user set ssl_type=‘X509’ where user=‘ssl_test’;
flush privileges;

7.测试登录(这里-h参数必须设置,mysql5.6可以不设置,mysql5.7必须设置)
mysql -h192.168.60.129 -ussl_test --ssl-cert=client-cert.pem --ssl-key=client-key.pem

=============================================================================================
使用JDBC连接数据库方式
使用JDBC连接,需要用到keystore文件
有三种使用方式,优先级顺次:

1.使用-D参数使用
-Djavax.net.ssl.keyStore=path_to_keystore_file
-Djavax.net.ssl.keyStorePassword=mypassword
-Djavax.net.ssl.trustStore=path_to_truststore_file
-Djavax.net.ssl.trustStorePassword=mypassword

2.使用System.setPreproties使用
System.setProperty(“javax.net.ssl.keyStore”,“path_to_keystore_file”);
System.setProperty(“javax.net.ssl.keyStorePassword”,“mypassword”);
System.setProperty(“javax.net.ssl.trustStore”,“path_to_truststore_file”);
System.setProperty(“javax.net.ssl.trustStorePassword”,“mypassword”);

3.使用jdbc连接Url使用
clientCertificateKeyStoreUrl=file:
clientCertificateKeyStorePassword=mypassword
clientCertificateKeyStoreUrl=file:
clientCertificateKeyStorePassword=mypassword
例如:xxxxclientCertificateKeyStoreUrl=file:&clientCertificateKeyStorePassword=mypassword&xxxx

坑:
我采用第三种方式使用,在一般的项目中没有问题,在windows下SSM项目也没问题,在Linux下SSM项目报一个密钥未初始化的错误,改成第二种使用方式得到解决

附:
mysql官方使用页:
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html

你可能感兴趣的:(技术贴,mysql,ssl)