全部產品
Search
文件中心

PolarDB:設定SSL加密

更新時間:Jan 07, 2026

為了提高鏈路安全性,您可以啟用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加密會重啟叢集,建議您在業務低峰期操作。

  1. 登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。

  2. 在左側功能表列中單擊配置与管理 > 安全管理

  3. SSL配置頁簽,單擊SSL状态右側滑塊,開啟SSL加密。

    說明

    支援為主地址、叢集地址和自訂地址配置SSL。

  4. 设置SSL對話方塊中,選擇需要開通SSL加密的鏈路,單擊确定

    說明

    您可以根據需要選擇加密私網地址或公網地址,但每次只能加密一條鏈路。

    設定SSL加密

步驟二:下載認證

開啟SSL加密後,您可以下載PolarDB叢集的認證,用於用戶端遠端連線PolarDB叢集時校正資料庫真偽。

  1. SSL配置頁簽,單擊相應地址地區中的下载证书

    下載認證

  2. 下載的檔案為壓縮包,包含如下三個檔案:

    • .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

  1. 開啟MySQL Workbench,選擇Database > Manage Connections

  2. 填寫PolarDB串連地址和帳號密碼。

  3. 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壓測配置

  1. 下載認證並解壓。

  2. Sysbench配置:

    1. sysbench命令列中增加--mysql-ssl=on

    2. 如果使用的是Sysbench 1.0.x版本,則需要在執行sysbench命令的目前的目錄下,將.pem格式檔案重新命名為cacert.pem。因為Sysbench的版本識別中,SSL認證的名稱是寫入程式碼為cacert.pem。

    3. 如果使用的是Sysbench 1.1.x版本,可以按照Sysbench 1.0.x的配置方式設定Sysbench的SSL認證。也可以通過--mysql-ssl-ca參數傳入PEM檔案的路徑。

  3. 壓測方式,請參考效能測試方法(OLTP)

    說明

    壓測時,請注意MySQL Client版本需要與PolarDB的MySQL版本保持一致。

步驟四:驗證串連已加密

SSL協議有很多版本,PolarDB目前支援TLSv1.2及以上的版本。在SSL握手期間,用戶端會和PolarDB服務端交換協商資訊,這些資訊包括TLS版本、加密套件和工作階段金鑰等。詳細的加密套件列表可以在OpenSSL官網進行查看。

  1. 使用已配置好SSL的用戶端串連到PolarDB叢集。

  2. 執行以下SQL查詢:

    SHOW STATUS LIKE 'ssl_cipher';
    
    +---------------+---------------------------+
    | Variable_name | Value                     |
    +---------------+---------------------------+
    | Ssl_cipher    | DHE-RSA-AES256-GCM-SHA384 |
    +---------------+---------------------------+
  3. 結果分析:

    • 如果Value列返回一個非空值(如DHE-RSA-AES256-GCM-SHA384),表示當前串連是加密的。

    • 如果Value列為空白,表示當前串連未加密,請檢查用戶端配置是否正確。

維護與管理

修改受保護地址

您需要修改SSL受保護的地址,可以單擊相應地址地區中的设置SSL進行修改。

重要

修改受保護地址後,SSL認證會自動更新,同時重啟您的叢集,建議您在業務低峰期操作。

設定SSL

更新認證有效期間

如果您修改了SSL串連地址或認證有效期間即將到期,您需要手動更新認證有效期間,以下內容將為您介紹如何更新認證有效期間。

重要

更新認證有效期間操作將會重啟叢集,重啟前請做好業務安排。

  1. SSL配置頁簽中單擊更新有效期

    更新認證有效期間

  2. 在彈出的對話方塊中,單擊确定

  3. 更新有效期間後,重新下載配置認證。

開啟認證自動輪換

開啟認證自動輪轉後,在認證即將到期的10天內,PolarDB會在叢集的可維護時間視窗內自動更新認證。

重要

自動更新認證將會重啟叢集,建議您在業務低峰期操作。

  1. SSL配置頁簽中,單擊高级选项

  2. 高级选项對話方塊中,選擇開啟認證自動輪轉,並單擊确认認證自動輪換

關閉SSL加密

重要

關閉SSL加密會重啟叢集,建議您在業務低峰期操作。

  1. SSL配置頁簽,單擊SSL状态右側滑塊,關閉SSL加密。

  2. 在彈出的對話方塊中,單擊确定

相關API

API

描述

DescribeDBClusterSSL

查詢PolarDB叢集SSL設定。

ModifyDBClusterSSL

設定PolarDB叢集SSL加密的開通、關閉或更新CA認證。