因工作需要,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