私以为,在5.7及以上的版本中开启SSL支持很简单甚至已经默认开启了只是不是强制SSL而已。
以为在工具连接中勾选SSL没有报错,只是在其他版本中可能就要手动操作一番了。
查看是否开启SSL连接:
mysql> SHOW GLOBAL VARIABLES LIKE '%ssl%'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+ 9 rows in set (0.01 sec)
如果为YES
代表已经默认开启不需要过多的操作了(当然可以替换证书)
服务器端系统变量指定允许客户端构建加密连接时服务器使用的证书和密钥文件:
ssl_ca
:证书颁发机构(CA)证书文件的路径名。
ssl_cert
:服务器公用密钥证书文件的路径名。可以将此证书发送到 Client 端,并根据其拥有的 CA 证书进行身份验证。
ssl_key
:服务器私钥文件的路径名。
ssl_cipher
:用于连接加密的允许密码列 table。
ssl_crl
:包含证书吊销列 table 的文件的路径名。
tls_version
:服务器允许使用哪种加密协议进行加密连接。
在5.7版本的数据库目录下已经自动生成对于的证书(.pem
)为了减少工作量我就不再生成和修改到对应的目录了。
强制客户端使用加密连接,请启用require_secure_transport
系统变量:
[mysqld] require_secure_transport=ON
仅允许使用 TLSv1.1 或 TLSv1.2 协议的连接:
[mysqld] tls_version=TLSv1.1,TLSv1.2
查看当前客户端会话使用哪种加密 TLS 协议和密码:
mysql> SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher'); +---------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------+----------------+ | Ssl_cipher | | | Ssl_version | | +---------------+----------------+ 2 rows in set (0.01 sec)
如果未使用连接未加密,则两个变量都为空。
使用加密连接登录:
mysql --ssl-mode=REQUIRED -p
再次查看:
mysql> SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher'); +---------------+-----------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------+-----------------------------+ | Ssl_cipher | ECDHE-RSA-AES128-GCM-SHA256 | | Ssl_version | TLSv1.2 | +---------------+-----------------------------+ 2 rows in set (0.00 sec)
这次可以看到已经使用加密连接到Mysql了。
ChiuYut
2022年08月21日