SpringBoot設置mysql的ssl連接


因工作需要,mysql連接需要開啟ssl認證,本文主要講述客戶端如何配置ssl連接

 開發環境信息:

SpringBoot: 2.0.5.RELEASE
mysql-connector-java: 8.0.18
mysql version:8.0.18

 

一、檢查服務端是否開啟ssl認證

show variables like '%ssl%';

 

二、確認用戶強制使用ssl認證

1.檢查用戶是否啟動ssl認證

use mysql;
select ssl_type from user where user='username' and host='%';
ps:username替換成具體的用戶名。

 

 

 2.強制用戶使用ssl認證

ALTER USER 'username'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;

 

三、生成客戶端證書

1.找服務端提供三個原始文件

  2.生成truststore文件

 

keytool -importcert -alias Cacert -file ca.pem  -keystore truststoremysql -storepass password123

 3.生成keystore文件

 

openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:mypassword -out client-keystore.p12
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass mypassword -destkeystore keystoremysql -deststoretype JKS -deststorepass password456

以上兩個文件生成的參數可以自己修改,windows環境中沒有openssl,在linux環境中執行。紅色部分的參數是后面配置要用到的。

 

 四、修改mysql的連接參數

1.正常的請求如下

spring.datasource.url = jdbc:mysql://1.2.3.4:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false

2.ssl雙向認證的請求如下

ssl.cert.path = /home/app/cert
ssl.config = true&verifyServerCertificate=true&requireSSL=true&clientCertificateKeyStoreUrl=file:${ssl.cert.path}/keystoremysql&clientCertificateKeyStorePassword=password456&trustCertificateKeyStoreUrl=file:${ssl.cert.path}/truststoremysql&trustCertificateKeyStorePassword=password123 
spring.datasource.url = jdbc:mysql://1.2.3.4:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=${ssl.config}

因為加上ssl認證后url太長了,所以提取了兩個變量。

   ssl.cert.path表示生成的兩個證書文件存放路徑

ssl.config的value里根據證書生成的參數對應修改,如果不需要ssl認證值設置為false即可。

以上就完成了客戶端的配置,如常啟動服務,驗證連接正常即可。

參考資料:
Connecting Securely Using SSL

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM