赞
踩
mysql的安装参考:https://blog.csdn.net/sumengnan/article/details/108736935
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状态
使用\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 选项
- //新建用户
- mysql> grant select on *.* to 'dba'@'%' identified by 'xxx' REQUIRE SSL;
- //修改用户
- mysql> ALTER USER 'dba'@'%' REQUIRE SSL;
- flush privileges;
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"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。