win-mysql8开启ssl

首先获取配置文件的路径,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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据