MySQL 5.7.44開啟SSL加密傳輸?shù)耐暾麑?shí)戰(zhàn)教程
一、前言
1. 為什么要開啟MySQL SSL加密
MySQL 默認(rèn)采用明文傳輸數(shù)據(jù),數(shù)據(jù)庫賬號、密碼、執(zhí)行的SQL語句、查詢結(jié)果均可通過內(nèi)網(wǎng)抓包直接竊取,存在極大數(shù)據(jù)泄露風(fēng)險。
在等保測評、政務(wù)、金融、企業(yè)生產(chǎn)環(huán)境中,數(shù)據(jù)庫傳輸加密是必過合規(guī)項(xiàng)。
SSL/TLS 核心價值:
- 全程加密傳輸,中間人無法竊 聽、篡改數(shù)據(jù)
- 校驗(yàn)服務(wù)端證書,防止中間人劫持攻擊
- 支持強(qiáng)制SSL連接,徹底杜絕明文訪問
2. 環(huán)境適配說明
- 數(shù)據(jù)庫版本:MySQL 5.7.44(兼容所有5.7.x版本)
- 操作系統(tǒng):CentOS7/8、Rocky Linux(附帶Windows配置方案)
- 依賴環(huán)境:openssl(系統(tǒng)默認(rèn)預(yù)裝)
- 適用場景:內(nèi)網(wǎng)生產(chǎn)、公網(wǎng)數(shù)據(jù)庫、等保合規(guī)場景
3. SSL證書文件作用說明
本次部署生成5類核心 pem 證書文件,各司其職:
| 證書文件 | 用途說明 | 使用端 |
|---|---|---|
| ca.pem | CA根證書,用于校驗(yàn)服務(wù)端、客戶端證書合法性 | 服務(wù)端、客戶端通用 |
| server-cert.pem | MySQL服務(wù)端公鑰證書 | 數(shù)據(jù)庫服務(wù)端 |
| server-key.pem | MySQL服務(wù)端私鑰(核心保密文件) | 數(shù)據(jù)庫服務(wù)端 |
| client-cert.pem | 客戶端連接公鑰證書 | 業(yè)務(wù)應(yīng)用、遠(yuǎn)程客戶端 |
| client-key.pem | 客戶端連接私鑰 | 業(yè)務(wù)應(yīng)用、遠(yuǎn)程客戶端 |
二、生成MySQL SSL證書(兩種方案)
方案一:官方工具一鍵生成(推薦、零報錯)
使用MySQL自帶 mysql_ssl_rsa_setup 工具,自動生成合規(guī)證書,無需手動配置參數(shù)。
1. 創(chuàng)建專屬證書目錄
獨(dú)立存放證書,不污染數(shù)據(jù)庫數(shù)據(jù)目錄,安全性更高:
# 創(chuàng)建證書目錄 mkdir -p /etc/mysql/ssl # 授權(quán)mysql用戶歸屬 chown mysql:mysql /etc/mysql/ssl # 收緊目錄權(quán)限 chmod 700 /etc/mysql/ssl
2. 一鍵生成全部證書
# yum/rpm 安裝MySQL 執(zhí)行此命令 mysql_ssl_rsa_setup --datadir=/etc/mysql/ssl --uid=mysql # 二進(jìn)制編譯安裝MySQL 執(zhí)行此命令 # /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/etc/mysql/ssl --uid=mysql
3. 收緊證書文件權(quán)限(生產(chǎn)必須)
私鑰文件禁止其他用戶讀取,防止證書泄露:
# 證書僅mysql用戶可讀可寫 chmod 600 /etc/mysql/ssl/*.pem chown mysql:mysql /etc/mysql/ssl/*.pem # 查看生成文件 ls -l /etc/mysql/ssl/*.pem
方案二:OpenSSL手動生成證書(備用)
無官方工具時,可通過openssl手動生成,有效期10年:
cd /etc/mysql/ssl # 1.生成CA根證書 openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem # 2.生成服務(wù)端證書 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem # 3.生成客戶端證書 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem # 統(tǒng)一權(quán)限 chmod 600 *.pem && chown mysql:mysql *.pem
三、修改MySQL配置文件開啟SSL
1. 定位配置文件
MySQL5.7 配置文件常見路徑:/etc/my.cnf、/etc/mysql/my.cnf
2. 寫入SSL核心配置
在配置文件 [mysqld] 段落中添加以下內(nèi)容:
[mysqld] # SSL證書絕對路徑 ssl_ca = /etc/mysql/ssl/ca.pem ssl_cert = /etc/mysql/ssl/server-cert.pem ssl_key = /etc/mysql/ssl/server-key.pem # 全局強(qiáng)制加密傳輸(生產(chǎn)環(huán)境必開,禁止明文連接) require_secure_transport = ON
3. 重啟MySQL生效
# systemd 系統(tǒng) systemctl restart mysqld systemctl status mysqld # 老舊系統(tǒng) service mysqld restart
排錯提示:啟動失敗90%為證書權(quán)限、文件路徑錯誤,重新執(zhí)行權(quán)限授權(quán)命令即可。
四、驗(yàn)證MySQL SSL開啟狀態(tài)
登錄MySQL數(shù)據(jù)庫,執(zhí)行以下SQL校驗(yàn)配置是否生效。
1. 查看SSL全局狀態(tài)
show variables like '%ssl%';
正常結(jié)果:
have_ssl = YES(核心標(biāo)識,代表SSL已開啟)have_openssl = YES- 三個證書路徑正常顯示
若為 DISABLED,說明配置未生效,需檢查配置文件段落、證書權(quán)限。
2. 查看當(dāng)前連接加密狀態(tài)
# 方式1:簡潔查看 show status like 'Ssl_cipher'; # 方式2:詳細(xì)信息 \s
加密連接會顯示加密算法(如 AES256-SHA),明文連接為空值。
五、客戶端SSL連接方式
1. 命令行SSL連接
mysql -h 數(shù)據(jù)庫IP -P3306 -u 用戶名 -p \ --ssl-mode=REQUIRED \ --ssl-ca=/etc/mysql/ssl/ca.pem \ --ssl-cert=/etc/mysql/ssl/client-cert.pem \ --ssl-key=/etc/mysql/ssl/client-key.pem
ssl-mode 權(quán)限說明:
DISABLED:禁用SSL,明文連接PREFERRED:優(yōu)先SSL,失敗降級明文(默認(rèn))REQUIRED:強(qiáng)制SSL,失敗拒絕連接(生產(chǎn)推薦)VERIFY_CA:校驗(yàn)CA證書合法性VERIFY_IDENTITY:校驗(yàn)證書+主機(jī)名(最高安全)
2. SpringBoot/JAVA 項(xiàng)目連接配置
URL 開啟SSL校驗(yàn),杜絕明文傳輸與中間人劫持:
jdbc:mysql://192.168.1.100:3306/testdb?useSSL=true&verifyServerCertificate=true&serverSslCert=/opt/mysql/ssl/ca.pem
六、數(shù)據(jù)庫用戶強(qiáng)制SSL登錄(高危防護(hù))
單獨(dú)配置用戶權(quán)限,指定用戶只能通過SSL連接,徹底杜絕明文登錄。
1. 新建強(qiáng)制SSL用戶
-- 普通加密連接(推薦業(yè)務(wù)用戶使用) CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!' REQUIRE SSL; GRANT ALL ON testdb.* TO 'app_user'@'%'; -- 雙向證書校驗(yàn)(高安全場景、管理員賬號) CREATE USER 'admin'@'%' IDENTIFIED BY 'Admin@123' REQUIRE X509; FLUSH PRIVILEGES;
2. 存量用戶修改為強(qiáng)制SSL
# 開啟強(qiáng)制SSL ALTER USER 'root'@'%' REQUIRE SSL; # 取消SSL強(qiáng)制 ALTER USER 'root'@'%' REQUIRE NONE; FLUSH PRIVILEGES;
3. 查詢用戶SSL權(quán)限
SELECT user,host,ssl_type FROM mysql.user;
ssl_type 為 ANY 代表強(qiáng)制SSL登錄。
七、Windows 環(huán)境補(bǔ)充配置
Windows 版 MySQL5.7.44 配置方式基本一致,僅路徑格式不同:
1. 生成證書
CMD 進(jìn)入MySQL bin目錄執(zhí)行:
mysql_ssl_rsa_setup.exe --datadir=D:\mysql57\ssl
2. my.ini 配置
[mysqld] ssl_ca = D:\\mysql57\\ssl\\ca.pem ssl_cert = D:\\mysql57\\ssl\\server-cert.pem ssl_key = D:\\mysql57\\ssl\\server-key.pem require_secure_transport = ON
八、常見報錯與解決方案
1. MySQL啟動失敗:Can’t load server-key.pem
原因:證書權(quán)限過大、歸屬用戶錯誤
解決:重新執(zhí)行權(quán)限收緊命令
2. have_ssl=DISABLED
原因:配置寫在 [client] 段落、證書路徑錯誤、未安裝openssl
解決:配置必須在 [mysqld] 段落,檢查路徑與依賴
3. SSL handshake failed
原因:證書不匹配、證書過期、客戶端ssl校驗(yàn)等級過高
解決:統(tǒng)一服務(wù)端與客戶端CA證書,降低ssl-mode等級
九、生產(chǎn)環(huán)境最佳實(shí)踐
- 證書目錄獨(dú)立存放,權(quán)限嚴(yán)格設(shè)置為 700,私鑰文件權(quán)限600
- 全局開啟
require_secure_transport=ON,禁止所有明文傳輸 - 業(yè)務(wù)用戶配置
REQUIRE SSL,核心管理員用戶使用REQUIRE X509雙向認(rèn)證 - 應(yīng)用連接開啟證書校驗(yàn),防止中間人劫持
- 定期輪換SSL證書,避免長期使用同一證書
十、總結(jié)
MySQL5.7.44 開啟SSL加密核心流程:安裝依賴→生成SSL證書→收緊權(quán)限→配置my.cnf→重啟服務(wù)驗(yàn)證→客戶端適配→用戶強(qiáng)制SSL授權(quán)。
開啟SSL后,可徹底解決數(shù)據(jù)庫明文傳輸風(fēng)險,完美適配等保測評、企業(yè)生產(chǎn)安全規(guī)范,是MySQL生產(chǎn)環(huán)境必備的安全加固操作。
以上就是MySQL 5.7.44開啟SSL加密傳輸?shù)耐暾麑?shí)戰(zhàn)教程的詳細(xì)內(nèi)容,更多關(guān)于MySQL 5.7.44開啟SSL加密傳輸?shù)馁Y料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在?CentOS?7?下如何使用?Ansible?Playbook?實(shí)現(xiàn)?MySQL?8.0.34?的
要在?CentOS?7?下使用?Ansible?Playbook?實(shí)現(xiàn)?MySQL?8.0.34?的二進(jìn)制安裝,需要先下載?MySQL?8.0.34?的二進(jìn)制包,并將其上傳至目標(biāo)服務(wù)器,對MySQL?8.0.34?二進(jìn)制安裝過程感興趣的朋友跟隨小編一起看看吧2024-03-03
使用Mycat-eye管理Mycat數(shù)據(jù)庫服務(wù)的操作
MyCat是一個開源的分布式數(shù)據(jù)庫系統(tǒng),是一個實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,前端用戶可以把它看作是一個數(shù)據(jù)庫代理,用MySQL客戶端工具和命令行訪問,本文給大家介紹了使用Mycat-eye管理Mycat數(shù)據(jù)庫服務(wù)的操作,需要的朋友可以參考下2024-04-04
Mysql 進(jìn)行SQL調(diào)優(yōu)的方法
文章詳細(xì)介紹了MySQL優(yōu)化索引的多種方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-11-11
解決mysql與navicat建立連接出現(xiàn)1251錯誤
在本篇文章里小編給大家整理了一篇關(guān)于mysql與navicat建立連接出現(xiàn)1251錯誤怎么解決的技術(shù)文章,需要的朋友們參考下。2019-08-08
windows10系統(tǒng)安裝mysql-8.0.13(zip安裝) 的教程詳解
這篇文章主要介紹了windows10安裝mysql-8.0.13(zip安裝) 的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11
MySQL存儲引擎MyISAM與InnoDB的9點(diǎn)區(qū)別
這篇文章主要介紹了MySQL存儲引擎MyISAM與InnoDB的9點(diǎn)區(qū)別,寫給有選擇困難癥的同學(xué),需要的朋友可以參考下2014-08-08
MySQL如何使用使用Xtrabackup進(jìn)行備份和恢復(fù)
Xtrabackup是由Percona開發(fā)的一個開源軟件,可實(shí)現(xiàn)對InnoDB的數(shù)據(jù)備份,支持在線熱備份(備份時不影響數(shù)據(jù)讀寫)。本文講解如何使用該工具進(jìn)行備份和恢復(fù)2021-06-06

