mysql开启ssl

mysql的安装参考:https://blog.csdn.net/sumengnan/article/details/108736935

一、如何打开mysql ssl?

1、先检查mysql是否已经开启了ssl

yes是已经打开了,如果是DISABLE则表示没有。

2、停止mysql

service mysqld stop或ps + kill方式

3、执行mysql_ssl_rsa_setup安装

在mysql bin目录下有mysql_ssl_rsa_setup文件,执行它开始安装ssl

安装完成后,会生成一些私钥公钥在mysql data目录下

[root mysql_data]# ll *.pem
-rw------- 1 mysql mysql 1675 Jun 12 17:22 ca-key.pem         #CA私钥
-rw-r--r-- 1 mysql mysql 1074 Jun 12 17:22 ca.pem             #自签的CA证书,客户端连接也需要提供
-rw-r--r-- 1 mysql mysql 1078 Jun 12 17:22 client-cert.pem    #客户端连接服务器端需要提供的证书文件
-rw------- 1 mysql mysql 1675 Jun 12 17:22 client-key.pem     #客户端连接服务器端需要提供的私钥文件
-rw------- 1 mysql mysql 1675 Jun 12 17:22 private_key.pem    #私钥/公钥对的私有成员
-rw-r--r-- 1 mysql mysql 451 Jun 12 17:22  public_key.pem     #私钥/公钥对的共有成员
-rw-r--r-- 1 mysql mysql 1078 Jun 12 17:22 server-cert.pem    #服务器端证书文件
-rw------- 1 mysql mysql 1675 Jun 12 17:22 server-key.pem     #服务器端私钥文件

注意这些密钥的权限问题,如果需要则执行:chown -R mysql.mysql *.pem

4、添加ssl参数到my.cnf配置文件

[mysqld]
ssl-ca=/usr/local/mysql/data/ca.pem
ssl-cert=/usr/local/mysql/data/client-cert.pem
ssl-key=/usr/local/mysql/data/client-key.pem

[mysql]
ssl-ca=/usr/local/mysql/data/ca.pem
ssl-cert=/usr/local/mysql/data/client-cert.pem
ssl-key=/usr/local/mysql/data/client-key.pem

5、启动mysql后,登录mysql检查ssl状态

二、如何查询当前mysql连接是否使用了ssl?

使用\s或status命令即可,如图:

如果没有使用ssl,则显示为Not in use

如果不想使用ssl则增加--ssl=0选项或--ssl-mode=DISABLED

mysql -uroot -proot --ssl=0或
mysql -uroot -proot --ssl-mode=DISABLED

一般localhost环境默认是不开启ssl的,如果想强制使用ssl,则增加--ssl-mode=REQUIRED 选项

三、如何设置某用户使用强制使用ssl

//新建用户
mysql> grant select on *.* to 'dba'@'%' identified by 'xxx' REQUIRE SSL; 
//修改用户
mysql> ALTER USER 'dba'@'%' REQUIRE SSL; 
flush privileges;

四、java如何使用ssl连接mysql

mysql使用ssl连接官方文档:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html

第一种方法(自定义密钥库):

1、如果直接配置了连接属性verifyServerCertificate=true&useSSL=true&requireSSL=true,启动项目会报错,缺少证书

2、所以我们需要把服务器端的data/ca.pem文件拿到客户端,再执行命令,添加到truststore密钥库

keytool -importcert -alias MySQLCACert -file ca.pem -keystore truststore -storepass mypassword

执行完毕会在当前文件夹生成一个truststore文件

3、然后把该文件的路径配置到连接属性&trustCertificateKeyStorePassword=mypassword&trustCertificateKeyStoreUrl=file:///Users/sumengnan/fsdownload/truststore

或是直接增加java启动参数-Djavax.net.ssl.trustStore=/Users/sumengnan/fsdownload/truststore -Djavax.net.ssl.trustStorePassword=mypassword

4、如果mysql配置了双向认证,则参考https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-using-ssl.html

如果不想使用服务器生成的客户端密钥和证书文件,也可以手动使用openssl创建密钥:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files.html

这种方法缺点是,java会放弃原来的cacerts默认密钥库,如果你用到了其他的证书,那在truststore密钥库没有证书,会报错的。

第二种方法(添加到cacerts默认密钥库):

数据库连接增加属性verifyServerCertificate=true&useSSL=true&requireSSL=true

提示:默认密钥库位置:$JAVA_HOME/jre/lib/security/cacerts

keytool -importcert -alias MySQLCACert -file /Users/sumengnan/fsdownload/ca.pem -keystore cacerts(一条命令搞定,连密码和连接配置都不需要了)

默认的密钥库口令是:"changeit"

猜你喜欢

转载自blog.csdn.net/sumengnan/article/details/114086217
今日推荐