輪換您的 SSL/TLS 憑證 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

輪換您的 SSL/TLS 憑證

Amazon RDS Certificate Authority 憑證 rds-ca-2019 已於 2024 年 8 月過期。如果您使用或計劃使用 Secure Sockets Layer (SSL) 或 Transport Layer Security (TLS) 搭配憑證驗證來連線至 RDS 資料庫執行個體或多可用區域資料庫叢集請考慮使用其中一個新的 CA 憑證 rds-ca-rsa2048-g1、rds-ca-rsa4096-g1 或 rds-ca-ecc384-g1。如果您目前未將 SSL/TLS 與憑證驗證搭配使用,則可能仍有過期的 CA 憑證,而且如果您計劃將 SSL/TLS 與憑證驗證搭配使用以連線至 RDS 資料庫,則必須將其更新為新的 CA 憑證。

Amazon RDS 提供新的 CA 憑證做為 AWS 安全最佳實務。如需新憑證和支援 AWS 區域的相關資訊,請參閱 使用 SSL/TLS 加密與資料庫執行個體或叢集的連線

若要更新資料庫的 CA 憑證,請使用下列方法:

在更新資料庫執行個體或多可用區域資料庫叢集以使用新的 CA 憑證之前,請務必更新連線至 RDS 資料庫的用戶端或應用程式。

輪換憑證的考量事項

在輪換憑證之前,請考慮下列情況:

  • Amazon RDS Proxy 使用來自 AWS Certificate Manager (ACM) 的憑證。如果您使用 RDS Proxy,當您輪換 SSL/TLS 憑證時,不需要更新使用 RDS Proxy 連線的應用程式。如需詳細資訊,請參閱 使用 TLS/SSL 搭配 RDS Proxy

  • 如果您使用 Go 1.15 版應用程式搭配 2020 年 7 月 28 日之前建立或更新至 rds-ca-2019 憑證的資料庫執行個體或多可用區域資料庫叢集,則必須再次更新憑證。根據您的引擎,將憑證更新為 rds-ca-rsa2048-g1、rds-ca-rsa4096-g1 或 rds-ca-ecc384-g1

    使用新的 CA 憑證識別符,將 modify-db-instance命令用於資料庫執行個體,或將 命令用於多可用區域資料庫叢集。 modify-db-cluster 您可以使用 describe-db-engine-versions 命令,尋找適用於特定資料庫引擎和資料庫引擎版本的 CA。

    如果您在 2020 年 7 月 28 日之後建立資料庫或更新其憑證,則不需要採取任何動作。如需詳細資訊,請參閱 Go GitHub 問題編號 39568

透過修改資料庫執行個體或叢集來更新您的 CA 憑證

下列範例會將您的 CA 憑證從 rds-ca-2019 更新至 rds-ca-rsa2048-g1您可以選擇不同的憑證。如需詳細資訊,請參閱 憑證授權單位

更新您的應用程式信任存放區,以減少與更新 CA 憑證相關聯的任何停機時間。如需與 CA 憑證輪換相關聯的重新啟動的詳細資訊,請參閱 自動伺服器憑證輪換

若要透過修改資料庫執行個體或叢集來更新您的 CA 憑證
  1. 下載新的 SSL/TLS 使用 SSL/TLS 加密與資料庫執行個體或叢集的連線 憑證,如中所述。

  2. 更新您的應用程式,以使用新的 SSL/TLS 憑證。

    更新應用程式 SSL/TLS 憑證的方法取決於您特定的應用程式。與應用程式開發人員合作更新應用程式的 SSL/TLS 憑證。

    如需針對每個資料庫引擎檢查 SSL/TLS 連線和更新應用程式的資訊,請參閱下列主題:

    如需更新 Linux 作業系統信任存放區的範例指令碼,請參閱 將憑證匯入信任存放區的範例指令碼

    注意

    憑證套件同時包含舊 CA 和新 CA 的憑證,讓您可以安全地更新應用程式,並在轉換期間維護連線。如果您使用 AWS Database Migration Service 將資料庫遷移至資料庫執行個體或叢集,我們建議您使用憑證套件來確保遷移期間的連線。

  3. 修改資料庫執行個體或多可用區域資料庫叢集,將 CA 從 rds-ca-2019 變更為 rds-ca-rsa2048-g1。若要檢查資料庫是否需要重新啟動才能更新 CA 憑證,請使用 describe-db-engine-versions 命令並查看 SupportsCertificateRotationWithoutRestart 旗標。

    重要

    如果您在憑證到期後發生連線問題,請在主控台中指定 Apply immediately (立即套用),或使用 --apply-immediately 來指定 AWS CLI選項。依預設,此操作排定在下一個維護時段執行。

    對於 RDS for Oracle 資料庫執行個體,我們建議您重新啟動 Oracle 資料庫,以防止任何連線錯誤。

    對於已啟用 AlwaysOn 或鏡像選項的 RDS for SQL Server 多可用區執行個體,當執行個體在憑證輪換後重新啟動時,預期會發生容錯移轉。

    若要為執行個體 CA 設定與預設 RDS CA 不同的覆寫,請使用 modify-certificates CLI 命令。

您可以使用 AWS Management Console 或 AWS CLI ,將資料庫執行個體或多可用區域資料庫叢集的 CA 憑證從 rds-ca-2019 變更為 rds-ca-rsa2048-g1

Console
  1. 登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/rds/ 的 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇資料庫,然後選擇您要修改的資料庫執行個體或多可用區域資料庫叢集

  3. 選擇 Modify (修改)。

    修改資料庫執行個體或多可用區域資料庫叢集
  4. 連線區段中,選擇 rds-ca-rsa2048-g1

    選擇 CA 憑證
  5. 選擇 Continue (繼續),並檢查修改的摘要。

  6. 若要立即套用變更,請選擇 Apply immediately (立即套用)。

  7. 在確認頁面上,檢閱您的變更。如果正確,請選擇修改資料庫執行個體或修改叢集以儲存變更。

    重要

    排定此操作時,請確定您事先已更新用戶端信任存放區。

    或者,選擇 Back (上一步) 以編輯變更,或是選擇 Cancel (取消) 以取消變更。

AWS CLI

若要使用 AWS CLI 將資料庫執行個體或多可用區域資料庫叢集的 CA 從 rds-ca-2019 變更為 rds-ca-rsa2048-g1,請呼叫 modify-db-instancemodify-db-cluster 命令。指定資料庫執行個體或叢集識別符和 --ca-certificate-identifier選項。

使用 --apply-immediately 參數立即套用更新。依預設,此操作排定在下一個維護時段執行。

重要

排定此操作時,請確定您事先已更新用戶端信任存放區。

資料庫執行個體

下列範例mydbinstance透過將 CA 憑證設定為 來修改 rds-ca-rsa2048-g1

對於 Linux、 macOS或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --ca-certificate-identifier rds-ca-rsa2048-g1

在 Windows 中:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --ca-certificate-identifier rds-ca-rsa2048-g1
注意

如果您的執行個體需要重新啟動,您可以使用 modify-db-instance CLI 命令並指定 --no-certificate-rotation-restart選項。

多可用區域資料庫叢集

下列範例mydbcluster透過將 CA 憑證設定為 來修改 rds-ca-rsa2048-g1

對於 Linux、 macOS或 Unix:

aws rds modify-db-cluster \ --db-cluster-identifier mydbcluster \ --ca-certificate-identifier rds-ca-rsa2048-g1

在 Windows 中:

aws rds modify-db-cluster ^ --db-cluster-identifier mydbcluster ^ --ca-certificate-identifier rds-ca-rsa2048-g1

透過套用維護來更新憑證授權機構憑證

執行下列步驟,透過套用維護來更新您的 CA 憑證。

Console
套用維護以更新您的 CA 憑證
  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/rds/:// 開啟 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇憑證更新

    憑證輪換導覽窗格選項

    需要更新憑證的資料庫頁面隨即顯示。

    更新資料庫的 CA 憑證
    注意

    此頁面僅顯示目前 的資料庫執行個體和叢集 AWS 區域。如果您在多個資料庫中有資料庫 AWS 區域,請檢查每個 中的此頁面 AWS 區域 ,以查看具有舊 SSL/TLS 憑證的所有資料庫執行個體。

  3. 選擇您要更新的資料庫執行個體或多可用區域資料庫叢集

    您可以選擇排程,以排定下一個維護時段的憑證輪換。您可以選擇立即套用以立即套用輪換。

    重要

    如果在憑證到期後發生連線問題,請使用立即套用選項。

    1. 如果您選擇排程,系統會提示您確認 CA 憑證輪換。此提示也會指出排定的更新時段。

      確認憑證輪換
    2. 如果您選擇立即套用,系統會提示您確認 CA 憑證輪換。

      確認憑證輪換
    重要

    在資料庫上排定 CA 憑證輪換之前,請先更新使用 SSL/TLS 的任何用戶端應用程式和要連結伺服器憑證。這些更新專屬於您的資料庫引擎。更新這些用戶端應用程式之後,您可以確認 CA 憑證輪換。

    若要繼續,請選擇核取方塊,然後選擇 Confirm (確認)

  4. 針對您要更新的每個資料庫執行個體和叢集重複步驟 3 和 4。

自動伺服器憑證輪換

如果您的根 CA 支援自動伺服器憑證輪換,RDS 會自動處理資料庫伺服器憑證的輪換。RDS 會使用相同的根 CA 進行此自動輪換,因此您不需要下載新的 CA 套件。請參閱 憑證授權單位

資料庫伺服器憑證的輪換和有效期取決於資料庫引擎:

  • 如果您的資料庫引擎支援在不重新啟動的情況下輪換,則 RDS 會自動輪換資料庫伺服器憑證,而不需要您採取任何動作。RDS 會嘗試在資料庫伺服器憑證有效期過半時,在您偏好的維護時段內輪換您的資料庫伺服器憑證。新的資料庫伺服器憑證有效期為 12 個月。

  • 如果您的資料庫引擎不支援在不重新啟動的情況下輪換,則 RDS 會在資料庫伺服器憑證到期之前至少 6 個月,通知您有關維護事件的資訊。新的資料庫伺服器憑證有效期為 36 個月。

使用 describe-db-engine-versions 命令並檢查 SupportsCertificateRotationWithoutRestart 旗標,以確定資料庫引擎版本是否支援在不重新啟動的情況下輪換憑證。如需詳細資訊,請參閱 設定資料庫的 CA

將憑證匯入信任存放區的範例指令碼

以下是範例 Shell 指令碼,會將憑證套件匯入信任存放區。

每個範例 Shell 指令碼都使用 keytool,其是 Java 開發套件 (JDK) 的一部分。如需安裝 JDK 的詳細資訊,請參閱《JDK 安裝指南》。

Linux

以下範例 Shell 指令碼將憑證套件匯入 Linux 作業系統上的信任存放區。

mydir=tmp/certs if [ ! -e "${mydir}" ] then mkdir -p "${mydir}" fi truststore=${mydir}/rds-truststore.jks storepassword=changeit curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"> ${mydir}/global-bundle.pem awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n+1 ".pem"}' < ${mydir}/global-bundle.pem for CERT in rds-ca-*; do alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print') echo "Importing $alias" keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt rm $CERT done rm ${mydir}/global-bundle.pem echo "Trust store content is: " keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias do expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'` echo " Certificate ${alias} expires in '$expiry'" done
macOS

以下是範例 Shell 指令碼,會將憑證套件匯入 macOS 上的信任存放區。

mydir=tmp/certs if [ ! -e "${mydir}" ] then mkdir -p "${mydir}" fi truststore=${mydir}/rds-truststore.jks storepassword=changeit curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"> ${mydir}/global-bundle.pem split -p "-----BEGIN CERTIFICATE-----" ${mydir}/global-bundle.pem rds-ca- for CERT in rds-ca-*; do alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print') echo "Importing $alias" keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt rm $CERT done rm ${mydir}/global-bundle.pem echo "Trust store content is: " keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias do expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'` echo " Certificate ${alias} expires in '$expiry'" done