首先获取配置文件的路径,windows版本简明的方式就是查看mysql的服务,在启动参数中有配置文件的路径,如下:
>sc qc mysql80
[SC] QueryServiceConfig 成功BINARY_PATH_NAME : "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80
使用生成好的证书文件,在my.ini中进行配置:
[mysqld]
ssl_ca=d:/ssl/RootCA.pem
ssl_cert=d:/ssl/Server.pem
ssl_key=d:/ssl/Server.key
参数的名字中使用中横线例如ssl-ca测试也可以识别,如上配置完成之后,重启mysql服务,登录客户端或者jdbc接口进行查看。本次使用的是SQuirreL SQL Client+JDBC驱动的方式来操作数据库。由于SQuirreL SQL Client只能配置URL的参数,所以keystore必须在SQuirreL SQL Client的启动脚本中通过-D参数的方式进行添加,例如在squirrel-sql.bat中添加如下参数:
-Djavax.net.ssl.keyStore=d:/ssl/Client.p12 -Djavax.net.ssl.keyStorePassword=Aa123456 -Djavax.net.ssl.trustStore=d:/ssl/ClientTrust.p12 -Djavax.net.ssl.trustStorePassword=Aa123456
然后在JDBC的URL中添加参数useSSL=true,例如:
jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&useSSL=true
其他的参数来自于网上,暂且作为参考。
最后,就是如何判断我们已经开启了服务端的SSL功能,并且确认本地登录使用的就是SSL链接呢?驱动服务端是否开启了SSL,可以查询ssl变量,例如:
SHOW VARIABLES LIKE '%ssl%'
Variable_name Value
--------------------------------------------------------------------------------------------------------
have_openssl YES
have_ssl YES
mysqlx_ssl_ca
mysqlx_ssl_capath
mysqlx_ssl_cert
mysqlx_ssl_cipher
mysqlx_ssl_crl
mysqlx_ssl_crlpath
mysqlx_ssl_key
ssl_ca d:/ssl/RootCA.pem
ssl_capath
ssl_cert d:/ssl/Server.pem
ssl_cipher
ssl_crl
ssl_crlpath
ssl_fips_mode OFF
ssl_key d:/ssl/Server.key
查询当前链接的状态呢,在网上找到一种方法,很有效:
SELECT CONNECTION_TYPE FROM performance_schema.threads where processlist_id = CONNECTION_ID()
CONNECTION_TYPE
------------------
SSL/TLS