MySQL配置SSL并修改JDBC連接配置過程
一、使用 OpenSSL 創(chuàng)建 SSL 證書和私鑰
- 根據(jù)自己的操作系統(tǒng)下載Win(xx)OpenSSL安裝
- 新建一個目錄用于存放生成的證書和私鑰
//生成一個 CA 私鑰 openssl genrsa 2048 > cert/ca-key.pem //使用私鑰生成一個新的數(shù)字證書,執(zhí)行這個命令時, 會需要填寫一些問題, 隨便填寫就可以了 openssl req -sha1 -new -x509 -nodes -days 3650 -key ./cert/ca-key.pem > cert/ca-cert.pem //創(chuàng)建服務(wù)器端RSA 私鑰和數(shù)字證書,這個命令會生成一個新的私鑰(server-key.pem), 同時會使用這個新私鑰來生成一個證書請求文件(server-req.pem). //這個命令同樣需要回答幾個問題, 隨便填寫即可. 不過需要注意的是, A challenge password 這一項需要為空 openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout cert/server-key.pem > cert/server-req.pem //將生成的私鑰轉(zhuǎn)換為 RSA 私鑰文件格式 openssl rsa -in cert/server-key.pem -out cert/server-key.pem //使用原先生成的 CA 證書來生成一個服務(wù)器端的數(shù)字證書 openssl x509 -sha1 -req -in cert/server-req.pem -days 3650 -CA cert/ca-cert.pem -CAkey cert/ca-key.pem -set_serial 01 > cert/server-cert.pem //創(chuàng)建客戶端的 RSA 私鑰和數(shù)字證書 openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout cert/client-key.pem > cert/client-req.pem //將生成的私鑰轉(zhuǎn)換為 RSA 私鑰文件格式 openssl rsa -in cert/client-key.pem -out cert/client-key.pem //為客戶端創(chuàng)建一個數(shù)字證書 openssl x509 -sha1 -req -in cert/client-req.pem -days 3650 -CA cert/ca-cert.pem -CAkey cert/ca-key.pem -set_serial 01 > cert/client-cert.pem
1.1 SSL 配置
在前面的步驟中, 我們已經(jīng)生成了8個文件, 分別是:
- ca-cert.pem: CA 證書, 用于生成服務(wù)器端/客戶端的數(shù)字證書.
- ca-key.pem: CA 私鑰, 用于生成服務(wù)器端/客戶端的數(shù)字證書.
- server-key.pem: 服務(wù)器端的 RSA 私鑰
- server-req.pem: 服務(wù)器端的證書請求文件, 用于生成服務(wù)器端的數(shù)字證書.
- server-cert.pem: 服務(wù)器端的數(shù)字證書.
- client-key.pem: 客戶端的 RSA 私鑰
- client-req.pem: 客戶端的證書請求文件, 用于生成客戶端的數(shù)字證書.
- client-cert.pem: 客戶端的數(shù)字證書.
二、查看數(shù)據(jù)庫是否支持 SSL
首先在 MySQL 上執(zhí)行如下命令, 查詢是否 MySQL 支持 SSL:
mysql> SHOW VARIABLES LIKE 'have_ssl'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_ssl | YES | +---------------+-------+ 1 row in set (0.02 sec)
當(dāng) have_ssl 為 YES 時, 表示此時 MySQL 服務(wù)已經(jīng)支持 SSL 了. 如果是 DESABLE, 則需要在啟動 MySQL 服務(wù)時, 使能 SSL 功能.
2.1 設(shè)置MySQL配置文件,開啟SSL驗證
vi my.cnf
# 在mysqld下面添加如下配置 [mysqld] require_secure_transport = ON
2.2 配置MySQL的SSL
接下來我們就需要分別配置服務(wù)器端和客戶端:
- 服務(wù)器端配置
- 服務(wù)器端需要用到三個文件, 分別是: CA 證書, 服務(wù)器端的 RSA 私鑰, 服務(wù)器端的數(shù)字證書, 我們需要在 [mysqld] 配置域下添加如下內(nèi)容:
[mysqld] ssl-ca=/etc/mysql/ca-cert.pem ssl-cert=/etc/mysql/server-cert.pem ssl-key=/etc/mysql/server-key.pem
接著我們還可以更改 bind-address, 使 MySQL 服務(wù)可以接收來自所有 ip 地址的客戶端, 即:
bind-address = *
當(dāng)配置好后, 我們需要重啟 MySQL 服務(wù)
最后一步, 我們添加一個需要使用 SSL 才可以登錄的帳號, 來驗證一下我們所配置的 SSL 是否生效:
GRANT ALL PRIVILEGES ON *.* TO 'ssl_test'@'%' IDENTIFIED BY 'ssl_test' REQUIRE SSL; FLUSH PRIVILEGES;
- 查看用戶是否使用ssl
SELECT ssl_type From mysql.user Where user="ssler"
ssl_type為空字符串,表示該用戶不強(qiáng)制要求使用ssl連接。
- 配置用戶必須使用ssl連接
ALTER USER 'ssler'@'%' REQUIRE SSL; FLUSH PRIVILEGES
此時再執(zhí)行
SELECT ssl_type From mysql.user Where user="ssler"

ANY表示必須使用ssl連接。
當(dāng)配置好后, 使用 root 登錄 MySQL
mysql --ssl-ca="D:/Program Files/OpenSSL-Win64/bin/cert/ca-cert.pem" --ssl-cert="D:/Program Files/OpenSSL-Win64/bin/cert/client-cert.pem" --ssl-key="D:/Program Files/OpenSSL-Win64/bin/cert/client-key.pem" -u coisini -p
當(dāng)連接成功后, 我們執(zhí)行 show variables like ‘%ssl%’ 語句會有如下輸出:
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 | +---------------+-----------------+ 9 rows in set (0.01 sec)
三、JAVA-JDBC配置
使用jdk自帶的keytool導(dǎo)入mysql的客戶端證書到密鑰倉庫,并生成密鑰文件。
根據(jù)上文查到的ca.pem,將其復(fù)制到目標(biāo)主機(jī)上,然后執(zhí)行下述指令
- 使用該命令生成java使用SSL連接所需的文件:
keytool -importcert -alias MySQLCACert -file "D:\Program Files\OpenSSL-Win64\bin\cert\ca-cert.pem" -keystore truststore -storepass 密碼
- 通過指令驗證證書是否導(dǎo)入
$ keytool -list -keystore mysql.ks 輸入密鑰庫口令: 密鑰庫類型: jks 密鑰庫提供方: SUN 您的密鑰庫包含 1 個條目 mysql, 2020-6-9, trustedCertEntry, 證書指紋 (SHA1): 6B:EE:FE:B4:74:89:A3:88:6C:49:22:44:6D:FB:88:DE:18:6A:7A:F6
- 將生成的文件配置系統(tǒng)環(huán)境變量
名:JAVA_OPTS 值:-Djavax.net.ssl.trustStore="上一步中生成文件的本地路徑" -Djavax.net.ssl.trustStorePassword="密碼"
- JDBC配置連接
##jdbc.properties: yxaq.dz=jdbc:mysql://127.0.0.1:3306/yxaqgl?verifyServerCertificate=true&useSSL=true&requireSSL=true
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL進(jìn)行監(jiān)控配置的詳細(xì)指南
這篇文章主要和大家分享一個完整的 MySQL 監(jiān)控配置實戰(zhàn)方案,涵蓋監(jiān)控工具安裝,核心指標(biāo)采集,可視化展示,告警配置等內(nèi)容,需要的可以了解下2025-06-06
MYSQL根據(jù)分組獲取組內(nèi)多條數(shù)據(jù)中符合條件的一條(實例詳解)
這篇文章主要介紹了MYSQL根據(jù)分組獲取組內(nèi)多條數(shù)據(jù)中符合條件的一條,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
mysql實現(xiàn)事務(wù)的提交與回滾的實例詳解
在本篇文章中我們給大家分享一篇關(guān)于mysql實現(xiàn)事務(wù)的提交與回滾的實例內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2020-01-01
Linux搭建單機(jī)MySQL8.0.26版本的操作方法
這篇文章主要介紹了Linux搭建單機(jī)MySQL8.0.26版本的操作方法,本文通過圖文并茂的形式給大家講解的非常詳細(xì),感興趣的朋友一起看看吧2025-05-05
MySQL數(shù)據(jù)庫備份工具mylvmbackup的使用解讀
這篇文章主要介紹了MySQL數(shù)據(jù)庫備份工具mylvmbackup的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05

