全部產品
Search
文件中心

ApsaraDB RDS:設定SSL加密

更新時間:Oct 25, 2024

RDS SQL Server的SSL(Secure Socket Layer)加密功能用於對傳輸中的資料進行加密,適用於增強RDS內外網串連的安全性、或滿足各類安全合規等情境。您可以使用阿里雲提供的認證或使用者自訂認證對傳輸中的資料進行加密,同時還支援對內網鏈路強制進行SSL加密,能有效保障資料在傳輸過程中的機密性。

功能介紹

SSL加密功能可以對RDS SQL Server和用戶端之間傳輸的資料進行加密,防止資料被第三方監聽、截取和篡改。

開啟SSL加密後,用戶端串連RDS SQL Server時,可以選擇進行強制加密串連或者非加密串連。

開啟SSL加密時,RDS SQL Server將產生伺服器憑證以及公私密金鑰。

在加密串連的建立過程中,RDS SQL Server會發送伺服器憑證(包含公開金鑰)給用戶端,用戶端用收到的公開金鑰加密產生的對稱金鑰,只有RDS SQL Server有私密金鑰能夠解密該對稱金鑰,RDS SQL Server和用戶端將使用該對稱金鑰對通訊資料進行加密和解密,從而保證通訊的機密性。用戶端還可以使用CA認證驗證收到的伺服器憑證以確認RDS SQL Server身份,防止中間人攻擊。

說明
  • TLS(Transport Layer Security)是SSL的後繼版本,本文統稱為SSL。

  • RDS SQL Server支援的TLS版本為1.0、1.1和1.2。

前提條件

使用自訂祕密金鑰加密前,需要先完成以下操作:

注意事項

  • SSL的認證有效期間為1年,請在到期前更新認證有效性,否則使用加密串連的用戶端程式將無法正常串連。

  • 開啟SSL加密、關閉SSL加密、更新SSL認證時會重啟執行個體,執行個體可能會有幾分鐘不可用。

  • 由於SSL加密的實現原理,開啟SSL加密會顯著增加CPU使用率。建議您僅在外網鏈路有加密需求的時候啟用SSL加密,內網鏈路相對較安全,一般無需對鏈路加密。

使用限制

步驟一:為RDS SQL Server開啟SSL加密

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側功能表列中單擊資料安全性

  3. SSL標籤頁,單擊未開通前面的開關。

  4. 設定SSL對話方塊中,選擇加密方式,並進行相關配置。

    使用由阿里雲自動產生的密鑰

    image

    參數

    是否必選

    說明

    請選擇受保護地址:

    選擇要開通SSL加密的鏈路。支援加密內網鏈路和外網鏈路,但僅允許加密一條鏈路。

    說明

    如需加密外網鏈路,需確保執行個體已開通外網地址。更多操作,請參見開通或關閉外網地址

    是否開啟強制加密

    開啟後將強制用戶端以加密方式串連SQL Server內網鏈路,且串連無需上傳CA認證,不再支援非加密串連方式。

    說明
    • 僅執行個體網路類型為Virtual Private Cloud時,才支援開啟強制加密。更多操作,請參見更改網路類型

    • 外網鏈路不支援強制加密。執行個體同時存在內網和外網鏈路時,如需對內網鏈路開啟強制加密,您需要先釋放外網。具體操作,請參見開通或關閉外網地址

    支援最低TLS版本

    選擇支援的最低TLS版本,當前支援TLS版本為1.0、1.1和1.2,低於該版本將被拒絕串連。

    例如,選擇TLS 1.1,則表示服務端僅接受TLS 1.1和1.2協議版本的用戶端串連請求,通過TLS 1.0建立串連的用戶端會被拒絕串連。

    使用自訂的密鑰進行加密

    說明

    使用自訂祕密金鑰加密前,請確保已完成操作前置條件,詳情請參見前提條件

    1. 上傳pfx格式認證到OSS面板中,單擊下一步

    2. 使用自訂祕密金鑰加密面板中,配置如下參數,並單擊下一步

      image

      參數

      說明

      OSS Bucket

      選擇認證所在的OSS Bucket。

      認證

      選擇需要的pfx認證。

      密碼

      輸入認證密碼。

    3. 設定常規選項面板中,配置如下參數。

      image

      參數

      是否必選

      說明

      請選擇受保護地址:

      選擇要開通SSL加密的鏈路。支援加密內網鏈路和外網鏈路,但僅允許加密一條鏈路。

      說明

      如需加密外網鏈路,需確保執行個體已開通外網地址。更多操作,請參見開通或關閉外網地址

      是否開啟強制加密

      開啟後將強制用戶端以加密方式串連SQL Server內網鏈路,且串連無需上傳CA認證,不再支援非加密串連方式。

      說明
      • 僅執行個體網路類型為Virtual Private Cloud時,才支援開啟強制加密。更多操作,請參見更改網路類型

      • 外網鏈路不支援強制加密。執行個體同時存在內網和外網鏈路時,如需對內網鏈路開啟強制加密,您需要先釋放外網。具體操作,請參見開通或關閉外網地址

      支援最低TLS版本

      選擇支援的最低TLS版本,當前支援TLS版本為1.0、1.1和1.2,低於該版本將被拒絕串連。

      例如,選擇TLS 1.1,則表示服務端僅接受TLS 1.1和1.2協議版本的用戶端串連請求,通過TLS 1.0建立串連的用戶端會被拒絕串連。

  5. 單擊確定,資料庫將支援SSL加密串連。

    開啟SSL加密需要約1分鐘,您可以手動重新整理頁面查看執行個體狀態。

步驟二:下載SSL CA認證

如果不使用CA認證,您也可以通過SSL加密串連RDS SQL Server。但建議您下載並使用CA認證,它可以在SSL握手階段驗證收到的伺服器憑證,以確認RDS SQL Server的身份,避免中間人攻擊。

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側功能表列中單擊資料安全性

  3. SSL頁簽下,單擊下載CA認證

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

    • p7b檔案:用於Windows系統中匯入CA認證。

    • PEM檔案:用於其他系統或應用中匯入CA認證。

    • JKS檔案:Java中的truststore憑證存放區檔案,密碼統一為apsaradb,用於Java程式中匯入CA憑證鏈結。

    重要

    在Java中使用JKS認證檔案時,jdk7和jdk8需要修改預設的jdk安全配置,在需要SSL訪問的資料庫所在機器的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

步驟三:配置SSL CA認證

在RDS SQL Server執行個體中開啟SSL加密後,應用端或用戶端在串連執行個體時需要配置SSL CA認證。本文以Microsoft SQL Server Management Studio(SSMS)為例,介紹SSL CA認證安裝方法。其它應用或者用戶端請參見對應產品的使用說明。

  1. 單擊案頭左下角搜尋方塊,輸入certmgr.msc並開啟。

  2. certmgr對話方塊中,滑鼠右擊可信任的根憑證授權單位

  3. 選擇所有任務 > 匯入

  4. 單擊下一步

  5. 認證匯入嚮導頁面中,單擊瀏覽匯入已下載的SSL CA認證,並單擊下一步

  6. 按個人需要選擇認證存放位置後,單擊下一步

  7. 單擊完成等待認證匯入。

  8. 開啟SQL Server Management Studio,單擊對話方塊右下角選項按鈕。

    image.png

  9. 串連屬性選項卡中,勾選加密串連信任伺服器憑證,並單擊串連按鈕。

    image.png

  10. 執行如下查詢,若查詢結果為TRUE,則說明串連已加密。

    SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID

附錄:通過SSL串連資料庫範例程式碼

# -*- coding:utf-8 -*-

import ssl
import pyodbc

# 建立一個SSL上下文,用於在Python中建立安全的SSL串連
context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile="D:\ca\ApsaraDB-CA-Chain.pem")

# 建立串連
# SERVER指定目標資料庫伺服器的地址;DATABASE指定串連的資料庫名稱;UID指定登入資料庫所需的使用者名稱;PWD指定登入資料庫所需的密碼;Encrypt指定是否啟用SSL加密,值為yes表示啟用。
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=rm-2zec********.sqlserver.rds.aliyuncs.com;DATABASE=master;UID=zhttest;PWD=zht****;Encrypt=yes', ssl=context)
cursor = conn.cursor()
cursor.execute('SELECT @@version')

rows = cursor.fetchall()

for row in rows:
    print(row)

# 關閉串連
conn.close()
using System;
using System.Data.SqlClient;

namespace SqlConnectionSSLExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 建立串連
            // Data Source指定目標SQL Server資料庫伺服器的地址;Initial Catalog指定串連的目標資料庫名稱;User ID指定串連資料庫所需的使用者名稱;Password指定串連資料庫所需的密碼;Encrypt指定是否啟用SSL加密傳輸,值為true表示啟用。
            string connectionString = "Data Source=rm-2ze********.sqlserver.rds.aliyuncs.com;Initial Catalog=master;User ID=zhttest;Password=zht****;Encrypt=true;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // 開啟串連
                connection.Open();
                try
                {
                    // 執行SQL查詢
                    SqlCommand cmd = new SqlCommand("SELECT @@version", connection);

                    string result = cmd.ExecuteScalar().ToString();

                    Console.WriteLine(result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error: {ex.Message}");
                }
            }
        }
    }
}

相關API

更多操作

更新認證有效期間

RDS SQL Server的SSL認證有效期間為1年,認證到期後不更新,會導致使用加密串連的用戶端程式無法正常串連執行個體。即將到期時,阿里雲將會通過郵件、站內信(事件中心)的方式提醒使用自訂認證開啟SSL的使用者。請在到期前更新認證有效期間,以確保用戶端程式能夠正常串連。

重要

更新有效期間操作將會重啟執行個體,執行個體可能會有幾分鐘不可用,重啟前請做好業務安排,謹慎操作。

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列單擊資料安全性

  3. 選擇SSL頁簽,單擊更新有效期間更新認證有效期間

關閉SSL加密

重要
  • 關閉SSL加密會重啟RDS執行個體,系統會觸發主備切換降低影響,但仍建議您在業務低峰期操作。

  • 關閉SSL加密後,資料庫訪問效能會有一定程度提升,但安全性上有削弱,故非安全環境下不建議關閉SSL加密。

  • 關閉SSL加密後,僅支援通過非SSL方式串連。

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列單擊資料安全性

  3. 選擇SSL標籤頁。

  4. 單擊已開通前面的開關,在彈出的提示框中單擊確定

查看串連加密情況

在SQL Server中,可以執行如下代碼查看當前串連是否已啟用了SSL加密串連:

SELECT session_id,encrypt_option
FROM sys.dm_exec_connections;
GO

如果在查詢sys.dm_exec_connections系統動態管理檢視時,返回當前串連的會話ID,並且encrypt_option的值為true,則說明該串連已經成功開啟了SSL加密。

常見問題

Q:SSL認證到期後不更新會有什麼影響?會影響執行個體運行或資料安全嗎?

A:SSL認證到期後不更新,僅會導致使用加密串連的用戶端程式無法正常串連執行個體,但不會影響執行個體運行或資料安全。