一、服务器端强制每个接入系统网络的用户使用SSL/TLS安全传输协议----------这时候就不用管客户端配置了
使用GRANT语句使所有用户均使用SSL
GRANT USAGE ON . TO <my_user>@ REQUIRE SSL;
检查每个用户返回的ssl_type值为ANY, X509, 或 SPECIFIED。
SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (’::1’, ‘127.0.0.1’, ‘localhost’);
二、如果mysql服务器是第三方的,默认是优先建立SSL连接,如果客户端发起非SSL连接也能建立。
我们无法配置服务端,只能去配置客户端:确保在mysql服务器支持ssl认证的前提下,一定用ssl连接。
1、检查服务端
(1)show variables like ‘%ssl%’;检查返回值是否为配置的证书路径
https://ssl.zzidc.com/SSLjiaocheng/2019/0718/646.html
ssl_ca、ssl_key、ssl_cert是CA和CA用服务端的key颁发给服务端的证书。
(2)show variables where variable_name=‘have_ssl’ or variable_name= ‘have_openssl’;
have_openssl 与 have_ssl 值都为DISABLED表示ssl未开启
mysql> show variables like 'have%ssl%';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
+---------------+----------+
(3)https://blog.csdn.net/hrbhanyu/article/details/61196443 :如何给服务端生成并配置证书
2、检查客户端
(1)代码
关于下面3个字段,只要配置了useSSL : set to true;就行?
useSSL : set to true;
requireSSL : set to true;
trustCertificateKeyStoreUrl : set
public class test6JavaJdbc {
public static void main(String[] args) {
Connection con;
String driver="com.mysql.jdbc.Driver";
//这里我的数据库是cgjr
String url="jdbc:mysql://localhost:3306/cgjr?useUnicode=true&characterEncoding=utf-8&useSSL=false";
String user="root";
String password="12345";
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
if (!con.isClosed()) {
System.out.println("数据库连接成功");
}
Statement statement = con.createStatement();
(2)设置用户必须以SSL方式连接MySQL数据库
mysql> create user 'ssl_test'@'%' identified by '123' require SSL;
在服务器端配置了SSL参数后,客户端发起连接时默认使用SSL方式。
mysql -h 192.168.20.246 -ussl_test -p'123' --ssl
以非加密方式连接MySQL,通过密码连接测试 [ 默认采用SSL连接,需要指定不使用SSL连接 ]
mysql -h 192.168.20.246 -ussl_test -p'123' --ssl=0