參考:Mysql5.7開啟SSL并且支持Springboot客戶端驗(yàn)證
https://blog.csdn.net/weixin_42911645/article/details/127070812
前提:已安裝好數(shù)據(jù)庫,這里以mysql5.7為例
一、配置mysql服務(wù)器
- 確認(rèn)數(shù)據(jù)庫目錄位置,可以輸入以下指令查看:
show variables like 'datadir';
數(shù)據(jù)庫安裝好后,在數(shù)據(jù)庫目錄下存在默認(rèn)生成好的證書文件:ca.pem
、ca-key.pem
、client-cert.pem
、client-key.pem
、server-cert.pem
、server-key.pem
如果沒有以上文件,需要手工生成,-> 【制作證書】
- 修改mysql配置文件,添加ssl調(diào)用配置
[client]
ssl-cert = "C:/ProgramData/MySQL/MySQL Server 5.7/Data/client-cert.pem"
ssl-key = "C:/ProgramData/MySQL/MySQL Server 5.7/Data/client-key.pem"
注意:如果是做了主從,需要把主的證書拷貝到從
[mysqld]
ssl-ca="C:/ProgramData/MySQL/MySQL Server 5.7/Data/ca.pem"
ssl-cert="C:/ProgramData/MySQL/MySQL Server 5.7/Data/server-cert.pem"
ssl-key="C:/ProgramData/MySQL/MySQL Server 5.7/Data/server-key.pem"
- 重啟mysql服務(wù),檢查數(shù)據(jù)庫ssl是否開啟狀態(tài),have_openssl 與 have_ssl 值都為YES表示ssl開啟成功
show variables like '%ssl%';
show variables like 'have%ssl%';
- 通過客戶端密鑰與證書ssl+密碼連接測試,并查看屬性
指定證書文件位置client-cert.pem
、client-key.pem
。
mysql -uroot -proot -h 127.0.0.1 -P 13306 --ssl-cert=D:/server/config/client-cert.pem --ssl-key=D:/server/config/client-key.pem
要確定當(dāng)前與服務(wù)器的連接是否使用加密,請(qǐng)檢查Ssl_cipher狀態(tài)變量的會(huì)話值 。如果該值為空,則連接未加密。否則,連接被加密并且該值指示加密密碼。例如:
mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';
+---------------+---------------------------+
| Variable_name | Value |
+---------------+---------------------------+
| Ssl_cipher | DHE-RSA-AES128-GCM-SHA256 |
+---------------+---------------------------+
對(duì)于mysql客戶端,另一種方法是使用STATUSor\s 命令并檢查該SSL行:文章來源:http://www.zghlxwxcb.cn/news/detail-403260.html
# 1.未使用
mysql> \s
...
SSL: Not in use
...
# 2.已使用
mysql> \s
...
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
...
二、JAVA客戶端連接數(shù)據(jù)庫
- 找服務(wù)端提供三個(gè)原始文件
在原始文件目錄下,依次執(zhí)行以下指令,生成keystoremysql
、truststoremysql
文件。
可自行修改密碼,默認(rèn)是123456
1. 生成truststore文件
keytool -importcert -alias Cacert -file ca.pem -keystore truststoremysql -storepass 123456
2. 生成中間文件
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:123456 -out client-keystore.p12
3. 生成keystore文件
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore keystoremysql -deststoretype JKS -deststorepass 123456
以上兩個(gè)文件生成的參數(shù)可以自己修改,windows環(huán)境中沒有openssl,在linux環(huán)境中執(zhí)行。密碼注意自行更改為統(tǒng)一的值,后續(xù)配置要用到
生成結(jié)果:
另:
為了方便,已經(jīng)將上述指令封裝為腳本:
create.sh:文章來源地址http://www.zghlxwxcb.cn/news/detail-403260.html
#!/bin/bash
passwd=$1
outpath=$(pwd)/out
echo "outpath: ${outpath}"
if [ -z "$passwd" ];then
echo '密碼不能為空,使用示例:./create 123456'
exit 0
fi
rm -rf $outpath
if [ ! -d $outpath ];then
mkdir $outpath
fi
echo '1【生成truststore文件...】'
keytool -importcert -alias Cacert -file ca.pem -keystore ${outpath}/truststoremysql -storepass ${passwd}
echo '2【生成中間文件...】'
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:${passwd} -out ${outpath}/client-keystore.p12
echo '3【生成keystore文件...】'
keytool -importkeystore -srckeystore ${outpath}/client-keystore.p12 -srcstoretype pkcs12 -srcstorepass ${passwd} -destkeystore ${outpath}/keystoremysql -deststoretype JKS -deststorepass ${passwd}
echo " "
echo "=======文件生成成功======"
echo "請(qǐng)拷貝目錄${outpath}下的 truststoremysql 和 keystoremysql 文件"
echo "========================="
- 使用目標(biāo)文件
keystoremysql
、truststoremysql
和密碼123456
進(jìn)行客戶端鏈接
以下為spring配置文件application.properties示例:
# 目標(biāo)文件目錄(keystoremysql、truststoremysql)
ssl.cert.path=C:\\Users\\cmc\\Desktop
# 生成目標(biāo)文件時(shí)填寫的密碼
ssl.password=123456
ssl.config=useSSL=true&verifyServerCertificate=true&requireSSL=true&clientCertificateKeyStoreUrl=file:${ssl.cert.path}/keystoremysql&clientCertificateKeyStorePassword=${ssl.password}&trustCertificateKeyStoreUrl=file:${ssl.cert.path}/truststoremysql&trustCertificateKeyStorePassword=${ssl.password}
# datasource配置:
spring.datasource.master.url=jdbc:mysql://127.0.0.1:13306/db1?nullCatalogMeansCurrent=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&${ssl.config}
到了這里,關(guān)于mysql數(shù)據(jù)庫使用useSSL=true,并配置ca證書和密鑰連接的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!