一、ssl证书问题
SSL(Secure Socket Layer:安全套接字层)利用数据加密、身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证(http升级为https,ws升级为wss)。
Mysql在5.x版本之后(具体哪些版本不做考究)要求,连接数据库时,如果不设置显示选项useSSL=true
或useSSL=true
,则默认建立ssl连接。若要禁用ssl连接,需要通过设置useSSL=false
来显示的禁用SSL。如果设置useSSL=true
则需要为服务器证书验证提供信任存储(网上有不少资料,本人不了解,不涉及这一部分)。开发环境下,建议关闭ssl,线上环境视需求开启。
如果不清楚自己的数据库版本是否默认开启了SSL,可以通过以下命令查看:
mysql> show variables like "%ssl%";
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| 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.00 sec)
mysql> show 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 |
+---------------+-----------------+
如果have_ssl
为DISABLED
,说明未开启,YES
则表示已开启。如果为DISABLED
,则表示在数据库配置层面上关闭了SSL
,即使使用useSSL=true
也不会建立SSL
认证。所以我们也可以通过修改该变量的值来达到控制效果(不做赘述)
也可以通过查看当前连接状态来确定是否使用了SSL:
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.25, for Win64 (x86_64)
Connection id: 32785
Current database:
Current user: root@localhost
SSL: Not in use
# SSL: Cipher in use is DHE-RSA-AES256-SHA
Using delimiter: ;
Server version: 5.7.25-log MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 2 days 18 hours 54 min 49 sec
二、升级至mysql8.+版本踩坑
- 最常见的问题:驱动问题
mysql 8.0 以后使用了新的连接方式,原先的数据库连接驱动的方式不再适用,需要使用最新的mysql连接驱动,即将com.mysql.jdbc.Driver
改为com.mysql.cj.jdbc.Driver
其他:https://blog.csdn.net/LiuWaiter/article/details/82869516?utm_source=blogxgwz2