為了提高鏈路安全性,您可以啟用SSL(Secure Sockets Layer)加密,並安裝SSL CA認證到需要的應用服務。SSL在傳輸層對網路連接進行加密,能提升通訊資料的安全性和完整性,但會同時增加網路連接回應時間。
背景資訊
SSL是Netscape公司所提出的安全保密協議,在瀏覽器和Web伺服器之間構造安全通道來進行資料轉送,採用RC4、MD5、RSA等密碼編譯演算法實現安全通訊。國際互連網工程工作群組(IETF)對SSL 3.0進行了標準化,標準化後更名為安全傳輸層協議(TLS)。由於SSL這一術語更為常用,因此本文所述的SSL加密實際是指TLS加密。
適用情境
公網訪問資料庫:當用戶端通過公用互連網串連PolarDB叢集時,資料鏈路暴露在非信任網路中,需進行加密以防範中間人攻擊。
滿足安全合規要求:特定的行業或資料保護法規(如PCI-DSS、GDPR)要求對傳輸中的敏感性資料進行加密。
跨網路環境通訊:在混合雲或多VPC架構中,跨越網路邊界的資料流需要通過SSL加密保障其機密性和完整性。
注意事項
操作步驟
步驟一:開啟SSL加密
開啟SSL加密會重啟叢集,建議您在業務低峰期操作。
登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
在左側功能表列中單擊。
在SSL配置頁簽,單擊SSL状态右側滑塊,開啟SSL加密。
說明支援為主地址、叢集地址和自訂地址配置SSL。
在设置SSL對話方塊中,選擇需要開通SSL加密的鏈路,單擊确定。
說明您可以根據需要選擇加密私網地址或公網地址,但每次只能加密一條鏈路。

步驟二:下載認證
開啟SSL加密後,您可以下載PolarDB叢集的認證,用於用戶端遠端連線PolarDB叢集時校正資料庫真偽。
在SSL配置頁簽,單擊相應地址地區中的下载证书。

下載的檔案為壓縮包,包含如下三個檔案:
.p7b格式檔案:用於Windows系統中匯入CA認證。
.pem格式檔案:用於其他系統或應用中匯入CA認證。
.jks格式檔案:Java中的truststore憑證存放區檔案,密碼統一為apsaradb,用於Java程式中匯入CA憑證鏈結。
說明在Java中使用JKS認證檔案時,jdk7和jdk8需要修改預設的jdk安全配置,在串連PolarDB資料庫的伺服器的
jre/lib/security/java.security檔案中,修改如下兩項配置:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024若不修改jdk安全配置,會報如下錯誤。其它類似報錯,一般也都由Java安全配置導致。
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
步驟三:從用戶端串連PolarDB叢集
開啟SSL加密後,用戶端和PolarDB叢集之間的串連是否實際使用SSL加密取決於用戶端的類型和設定。例如,某些用戶端可能預設採用加密串連。您可以修改用戶端的設定或代碼,確保建立加密串連並驗證PolarDB叢集的身份。
若您是使用DMS登入並管理PolarDB叢集,則無需對鏈路加密。
命令列
對於MySQL 5.7.11及以後版本的用戶端,在串連命令中添加--ssl-mode選項可以設定SSL加密。
--ssl-mode=DISABLED,表示串連不加密。--ssl-mode=PREFERRED或者不添加--ssl-mode選項,表示嘗試加密串連,如果無法加密則採用非加密串連。--ssl-mode=REQUIRED,表示必須加密串連,如果無法加密則串連失敗。--ssl-mode=VERIFY_CA,表示必須加密串連,並用本地的CA認證驗證伺服器憑證是否有效。--ssl-mode=VERIFY_IDENTITY,表示必須加密串連,並用本地的CA認證驗證伺服器憑證是否有效,並驗證伺服器憑證的主機名稱或IP地址是否與實際串連的主機名稱或IP地址匹配。
樣本一:嘗試加密串連,如果無法加密則採用非加密串連。
mysql -h {串連地址} -u {帳號} -p --ssl-mode=PREFERRED樣本二:要求加密串連,並驗證伺服器憑證的有效性。
mysql -h {串連地址} -u {帳號} -p --ssl-mode=VERIFY_CA --ssl-ca={CA憑證路徑}/ApsaraDB-CA-Chain.pem上述樣本裡的
{串連地址}、{帳號}和{CA憑證路徑}需替換為實際的值。更多關於
--ssl-mode選項的說明,請參見MySQL官方文檔。
MySQL Workbench
開啟MySQL Workbench,選擇。
填寫PolarDB串連地址和帳號密碼。
在SSL頁簽下,設定Use SSL參數,指定SSL CA File為下載的PEM格式CA認證,然後單擊Test Connection或者OK。
說明關於Use SSL參數的選項,可以參考命令列串連方式的--ssl-mode說明。
應用程式代碼
Java
Connector/J(mysql-connector-java)是MySQL官方提供的JDBC驅動程式。本樣本使用mysql-connector-java 8.0.19版本作為依賴。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>以下範例程式碼使用sslMode屬性指定SSL模式。mysql-connector-java從8.0.13版本開始支援該屬性,如果您使用更早的版本,則需要改為使用useSSL、requireSSL和verifyServerCertificate屬性,具體請參見MySQL文檔。
範例程式碼:
package com.example.ssltest;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS=null;
try{
mysqlDS = new MysqlDataSource();
//可按需設定SslMode。關於該屬性的選項,請參見命令列串連方式的說明。
mysqlDS.setSslMode("VERIFY_IDENTITY");
//truststore用於儲存CA認證,這裡設定truststore類型為JKS。
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// 請將file:/後面的路徑改為您的ApsaraDB-CA-Chain.jks檔案的路徑。
mysqlDS.setTrustCertificateKeyStoreUrl("file://{CA憑證路徑}/ApsaraDB-CA-Chain.jks");
// 下載的JKS檔案的密碼為apsaradb,不能修改。
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// 您的資料庫連接串
mysqlDS.setServerName("your_polardb_host");
// 您的資料庫連接埠
mysqlDS.setPort(3306);
// 您的資料庫帳號
mysqlDS.setUser("your_username");
// 您的資料庫密碼
mysqlDS.setPassword("your_password");
// 您的資料庫名
mysqlDS.setDatabaseName("your_database");
System.out.println("正在嘗試串連資料庫...");
conn = mysqlDS.getConnection();
System.out.println("資料庫連接成功!");
// 使用 try-with-resources 確保 Statement 和 ResultSet 被自動關閉
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
// 檢查查詢是否有返回結果
if (rs.next()) {
// 擷取第一列的結果並列印
String dbVersion = rs.getString(1);
System.out.println("資料庫版本: " + dbVersion);
} else {
System.out.println("未能擷取到資料庫版本資訊。");
}
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}Python
# 安裝pymysql
# pip install pymysql
import pymysql
# --- 配置你的資料庫資訊 ---
db_config = {
'host': 'your_polardb_host', # 您的叢集地址
'user': 'your_username', # 您的使用者名稱
'password': 'your_password', # 您的密碼
'database': 'your_database', # 您要串連的資料庫
'port': 3306
}
# --- 配置SSL資訊 ---
ssl_args = {
'ca': '{CA憑證路徑}/ApsaraDB-CA-Chain.pem',
'mode': 'VERIFY_CA'
}
try:
# 建立串連,傳入ssl參數
print("正在嘗試使用SSL串連到MySQL...")
connection = pymysql.connect(**db_config, ssl=ssl_args)
print("SSL串連成功!")
with connection.cursor() as cursor:
# 執行一個簡單的查詢來驗證串連
cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print(f"資料庫版本: {version[0]}")
except pymysql.MySQLError as e:
# 列印SSL相關的錯誤會很有協助
print(f"串連失敗: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("資料庫連接已關閉。")Sysbench壓測配置
下載認證並解壓。
Sysbench配置:
sysbench命令列中增加--mysql-ssl=on。如果使用的是Sysbench 1.0.x版本,則需要在執行
sysbench命令的目前的目錄下,將.pem格式檔案重新命名為cacert.pem。因為Sysbench的版本識別中,SSL認證的名稱是寫入程式碼為cacert.pem。如果使用的是Sysbench 1.1.x版本,可以按照Sysbench 1.0.x的配置方式設定Sysbench的SSL認證。也可以通過
--mysql-ssl-ca參數傳入PEM檔案的路徑。
壓測方式,請參考效能測試方法(OLTP)。
說明壓測時,請注意MySQL Client版本需要與PolarDB的MySQL版本保持一致。
步驟四:驗證串連已加密
SSL協議有很多版本,PolarDB目前支援TLSv1.2及以上的版本。在SSL握手期間,用戶端會和PolarDB服務端交換協商資訊,這些資訊包括TLS版本、加密套件和工作階段金鑰等。詳細的加密套件列表可以在OpenSSL官網進行查看。
使用已配置好SSL的用戶端串連到PolarDB叢集。
執行以下SQL查詢:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+結果分析:
如果
Value列返回一個非空值(如DHE-RSA-AES256-GCM-SHA384),表示當前串連是加密的。如果
Value列為空白,表示當前串連未加密,請檢查用戶端配置是否正確。
維護與管理
修改受保護地址
您需要修改SSL受保護的地址,可以單擊相應地址地區中的设置SSL進行修改。
修改受保護地址後,SSL認證會自動更新,同時重啟您的叢集,建議您在業務低峰期操作。

更新認證有效期間
如果您修改了SSL串連地址或認證有效期間即將到期,您需要手動更新認證有效期間,以下內容將為您介紹如何更新認證有效期間。
更新認證有效期間操作將會重啟叢集,重啟前請做好業務安排。
開啟認證自動輪換
開啟認證自動輪轉後,在認證即將到期的10天內,PolarDB會在叢集的可維護時間視窗內自動更新認證。
自動更新認證將會重啟叢集,建議您在業務低峰期操作。
在SSL配置頁簽中,單擊高级选项。
在高级选项對話方塊中,選擇開啟認證自動輪轉,並單擊确认。

關閉SSL加密
關閉SSL加密會重啟叢集,建議您在業務低峰期操作。
在SSL配置頁簽,單擊SSL状态右側滑塊,關閉SSL加密。
在彈出的對話方塊中,單擊确定。
相關API
API | 描述 |
查詢PolarDB叢集SSL設定。 | |
設定PolarDB叢集SSL加密的開通、關閉或更新CA認證。 |
