本文介紹 Lindorm 寬表引擎 MySQL 協議 33060 連接埠的 SSL/TLS 加密鏈路使用方式。
版本要求
寬表 >= 2.8.6.14 並且 SQL 版本 >= 2.9.7.16
適用範圍
本文說明 Lindorm 寬表引擎 MySQL 協議 33060 連接埠的 SSL/TLS 加密鏈路使用方式,覆蓋以下情境:
用戶端只要求鏈路加密:使用
sslMode=REQUIRED。用戶端要求基於 CA 憑證校正服務端憑證鏈結:使用
sslMode=VERIFY_CA並配置控制台下載的 CA 憑證。JDBC 用戶端需要使用 CA 憑證嚴格校正時,將 CA 憑證匯入 truststore 後串連。
控制台開通 SSL Data Encryption Service
前提條件
已開通 Lindorm 寬表引擎。
操作步驟
登入Lindorm管理主控台。
在頁面左上方,選擇執行個體所屬的地區。
在实例列表頁,單擊目標執行個體ID或者目標執行個體所在行操作列的管理。
在執行個體詳情頁左側導覽列,依次單擊。
在数据链路SSL地區,在当前状态:地區進行開啟操作。
等待 SSL Data Encryption Service開通完成。頁面顯示以下資訊時,表示 SSL Data Encryption Service已開啟:
当前状态::已开启
SSL证书有效期::頁面展示的認證到期時間,例如
2036-06-13 18:02:25SSL证书有效性::有效
頁面提供下 载 CA 证 书按鈕
用戶端如果要使用 VERIFY_CA 嚴格校正,需要單擊下 载 CA 证 书擷取 CA 憑證檔案。
用戶端串連模式
只要求加密鏈路
若僅需保障用戶端到服務端的鏈路加密,使用 sslMode=REQUIRED。該模式會啟用 TLS 加密,但無需用戶端額外配置 CA 根憑證。
MySQL 命令樣本
mysql --ssl-mode=REQUIRED \ -h <host> \ -P 33060 \ -u <user> \ -p \ -D <database> \ --get-server-public-key詳細使用方式可參見通過MySQL命令列串連並使用寬表引擎。
JDBC樣本
String url = "jdbc:mysql://<host>:33060/<database>" + "?sslMode=REQUIRED" + "&allowPublicKeyRetrieval=true"; Connection connection = DriverManager.getConnection(url, user, password);詳細使用方式可參見基於Java JDBC介面的應用開發。
嚴格校正憑證鏈結
如果用戶端需要確認服務端認證由可信 CA 簽發,使用 sslMode=VERIFY_CA,並通過 --ssl-ca 指定控制台下載的 CA 憑證。
mysql --ssl-mode=VERIFY_CA \
--ssl-ca=/path/to/Lindorm-CA.crt \
-h <host> \
-P 33060 \
-u <user> \
-p \
-D <database> \
--get-server-public-key樣本查詢:
mysql --ssl-mode=VERIFY_CA \
--ssl-ca=/path/to/Lindorm-CA.crt \
-h <host> -P 33060 -u <user> -p -D <database> \
--get-server-public-key \
-e "SELECT 1 AS ok"請將樣本中的/path/to/Lindorm-CA.crt 替換為 Lindorm-CA.crt 檔案在您本地環境中的實際絕對路徑。
返回 ok = 1 表示用戶端已基於 CA 憑證完成 SSL 握手和查詢。
VERIFY_IDENTITY 模式說明
VERIFY_IDENTITY 會在 VERIFY_CA 的基礎上繼續校正串連網域名稱是否匹配服務端認證的 SAN/CN。因此,使用該模式的前提是:用戶端串連時使用的 host 必須與認證中聲明的網域名稱或 IP 完全一致。
JDBC 嚴格 CA 校正
MySQL Connector/J 通用做法是先把控制台下載的 CA 憑證匯入 Java truststore,再在 JDBC URL 中配置 truststore。
產生 truststore
keytool -importcert \
-alias lindorm-ca \
-file /path/to/Lindorm-CA.crt \
-keystore /path/to/lindorm-ca.p12 \
-storetype PKCS12 \
-storepass changeit \
-noprompt請將樣本中的
/path/to/Lindorm-CA.crt替換為該認證檔案在您本地環境中的實際絕對路徑。請將樣本中的
/path/to/lindorm-ca.p12替換為您計劃在本地環境中儲存該檔案的實際絕對路徑。
JDBC URL
String url = "jdbc:mysql://<host>:33060/<database>"
+ "?sslMode=VERIFY_CA"
+ "&allowPublicKeyRetrieval=true"
+ "&trustCertificateKeyStoreUrl=file:/path/to/lindorm-ca.p12"
+ "&trustCertificateKeyStorePassword=changeit"
+ "&trustCertificateKeyStoreType=PKCS12";
Connection connection = DriverManager.getConnection(url, user, password);注意:trustCertificateKeyStoreUrl 使用的是 truststore 檔案路徑,不是直接填寫服務端憑證路徑。控制台下載的 CA 憑證可以先匯入 PKCS12 或 JKS truststore 後再給 JDBC 使用。
常見問題
Q:SSL 加密是否控制台開通以後就能夠生效
A:SSL 加密是否開通是服務端和用戶端協商決定的,需要在用戶端配置 sslMode 來協商決定。
Q:SSL 加密是否有效能損耗
A:開通 SSL 加密會有效能損耗,對於效能敏感情境,建議禁用 SSL 加密,可以在串連串中設定
sslMode=DISABLED來禁用 SSL 加密。Q:只配置憑證路徑是否會自動開啟 SSL
A:不會。服務端必須開啟對應 SSL 開關後,MySQL 協議 SSL 鏈路才會啟用。
Q:REQUIRED 和 VERIFY_CA 有什麼區別
A:
REQUIRED只要求建立 TLS 加密鏈路,不要求用戶端校正服務端憑證鏈結。VERIFY_CA除了建立 TLS 加密鏈路,還要求用戶端信任簽發服務端認證的 CA 根憑證。Q:--ssl-ca 應該填寫哪個認證
A:填寫控制台
下載 CA 憑證得到的 CA 根憑證。不要把服務端認證server.cert直接當作--ssl-ca使用。Q:JDBC 可以直接使用 crt 檔案嗎
A:不同 MySQL Connector/J 版本對 PEM 認證參數的支援存在差異。通用做法是將控制台下載的 CA 憑證匯入 PKCS12 或 JKS truststore,然後通過
trustCertificateKeyStoreUrl、trustCertificateKeyStorePassword、trustCertificateKeyStoreType配置給 JDBC。