轮换 SSL/TLS 证书 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

轮换 SSL/TLS 证书

截至 2020 年 5 月 5 日,Amazon RDS CA-2015 证书已过期。如果您使用或计划为证书验证使用安全套接字层 (SSL) 或传输层安全性 (TLS) 连接到 RDS 数据库实例,则需要 Amazon RDS CA-2019 证书,这些证书已默认为新数据库实例启用。如果您当前未将 SSL/TLS 用于证书验证,则可能仍有过期的 CA-2015 证书,如果您计划为证书验证使用 SSL/TLS 连接到 RDS 数据库,则必须将其更新为 CA-2019 证书。

请按照以下说明完成更新。更新数据库实例以使用新的 CA 证书之前,请确保更新连接到 RDS 数据库的客户端或应用程序。

Amazon RDS 提供新 CA 证书作为Amazon最佳安全实践。有关新证书和受支持的 Amazon 区域的信息,请参阅 使用 SSL/TLS 加密与数据库集群的连接

注意

Amazon RDS Proxy 和 Aurora Serverless 使用来自 Amazon Certificate Manager (ACM) 的证书。如果您正在使用 RDS Proxy,当您轮换 SSL/TLS 证书时,您不需要更新使用 RDS Proxy 连接的应用程序。有关在 RDS Proxy 中使用 TLS/SSL 的更多信息,请参阅 将 TLS/SSL 与 RDS Proxy 结合使用

如果使用的是 Aurora Serverless,则不需要轮换 SSL/TLS 证书。有关在 Aurora Serverless 中使用 TLS/SSL 的更多信息,请参阅将 TLS/SSL 与 Aurora Serverless v1 结合使用

注意

如果您将 Go 版本 1.15 应用程序与在 2020 年 7 月 28 日之前创建或更新到 rds-ca-2019 证书的数据库实例一起使用,则必须再次更新证书。将证书更新为 rds-ca-rsa2048-g1、rds-ca-rsa4096-g1 或 rds-ca-ecc384-g1,具体取决于您的引擎。使用新的 CA 证书标识符运行 Amazon CLI 部分中显示的 modify-db-instance 命令。您可以使用 describe-db-engine-versions 命令找到适用于特定数据库引擎和数据库引擎版本的 CA。

如果您在 2020 年 7 月 28 日之后创建了数据库实例或更新了其证书,则无需执行任何操作。有关更多信息,请参阅 Go GitHub 问题 #39568

通过修改数据库实例来更新 CA 证书

完成以下步骤以更新 CA 证书。

通过修改数据库实例来更新 CA 证书
  1. 下载新的 SSL/TLS 证书,如 使用 SSL/TLS 加密与数据库集群的连接 中所述。

  2. 更新应用程序以使用新的 SSL/TLS 证书。

    更新应用程序以使用新 SSL/TLS 证书的方法取决于特定的应用程序。请与应用程序开发人员一起更新应用程序的 SSL/TLS 证书。

    有关检查 SSL/TLS 连接和更新每个数据库引擎的应用程序的信息,请参阅以下主题:

    有关更新 Linux 操作系统信任存储的示例脚本,请参阅将证书导入信任存储的示例脚本

    注意

    证书捆绑包包含新旧 CA 证书,因此您可以安全地升级应用程序并在转换期间保持连接。如果您正在使用 Amazon Database Migration Service 将数据库迁移到数据库集群,我们建议您使用证书捆绑包来确保迁移期间的连接性。

  3. 修改数据库实例,以便将 CA 从 rds-ca-2015 更改为 rds-ca-2019

    重要

    默认情况下,此操作会重启您的数据库实例。如果您不想在此操作期间重启数据库实例,可以使用 modify-db-instance CLI 命令并指定 --no-certificate-rotation-restart 选项。

    在数据库下次重启之前,此选项将不会轮换证书,无论是计划维护还是计划外维护。仅当您不使用 SSL/TLS 时,才建议使用此选项。

    如果您在证书到期后遇到连接问题,请通过在控制台中指定 Apply immediately (立即应用) 或者 使用 --apply-immediately 指定 Amazon CLI 选项来使用“立即应用”选项。默认情况下,此操作安排在您的下个维护时段运行。

您可以使用 Amazon Web Services Management Console 或 Amazon CLI 为数据库实例将 CA 证书从 rds-ca-2015 更改为 rds-ca-2019

为数据库实例将 CA 从 rds-ca-2015 更改为 rds-ca-2019
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择数据库,然后选择要修改的数据库实例。

  3. 选择修改

    
                                        修改数据库实例

    将显示 Modify DB Instance (修改数据库实例) 页面。

  4. Connectivity(连接)部分选择 rds-ca-2019

    
                                        选择 CA 证书
  5. 选择继续,查看修改摘要。

  6. 要立即应用更改,请选择立即应用

    重要

    选择此选项会立即重启数据库。

  7. 在确认页面上,检查您的更改。如果更改正确无误,请选择 Modify DB Instance (修改数据库实例) 保存更改。

    重要

    安排此操作时,请确保已预先更新客户端信任存储。

    也可以选择 Back 编辑您的更改,或选择 Cancel 取消更改。

要使用 Amazon CLI 将数据库实例的 CA 从 rds-ca-2015 更改为 rds-ca-2019,请调用 modify-db-instance 命令。指定数据库实例标识符和 --ca-certificate-identifier 选项。

重要

安排此操作时,请确保已预先更新客户端信任存储。

以下代码通过将 CA 证书设置为 mydbinstance 来修改 rds-ca-2019。将在下一维护时段使用 --no-apply-immediately 应用这些更改。使用 --apply-immediately 可立即应用更改。

重要

默认情况下,此操作会重启您的数据库实例。如果您不想在此操作期间重启数据库实例,可以使用 modify-db-instance CLI 命令并指定 --no-certificate-rotation-restart 选项。

在数据库下次重启之前,此选项将不会轮换证书,无论是计划维护还是计划外维护。仅当您不使用 SSL/TLS 时,才建议使用此选项。

使用 --apply-immediately 可立即应用更新。默认情况下,此操作安排在您的下个维护时段运行。

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --ca-certificate-identifier rds-ca-2019 \ --no-apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --ca-certificate-identifier rds-ca-2019 ^ --no-apply-immediately

通过应用数据库实例维护来更新 CA 证书

完成以下步骤,通过应用数据库实例维护来更新 CA 证书。

通过应用数据库实例维护来更新 CA 证书
  1. 下载新的 SSL/TLS 证书,如 使用 SSL/TLS 加密与数据库集群的连接 中所述。

  2. 更新数据库应用程序以使用新的 SSL/TLS 证书。

    更新应用程序以使用新 SSL/TLS 证书的方法取决于特定的应用程序。请与应用程序开发人员一起更新应用程序的 SSL/TLS 证书。

    有关检查 SSL/TLS 连接和更新每个数据库引擎的应用程序的信息,请参阅以下主题:

    有关更新 Linux 操作系统信任存储的示例脚本,请参阅将证书导入信任存储的示例脚本

    注意

    证书捆绑包包含新旧 CA 证书,因此您可以安全地升级应用程序并在转换期间保持连接。

  3. 应用数据库实例维护,以将 CA 从 rds-ca-2015 更改为 rds-ca-2019

    重要

    您可以选择立即应用更改。默认情况下,此操作安排在您的下个维护时段运行。

您可以使用 Amazon Web Services Management Console 来应用数据库实例维护,以将多个数据库实例的 CA 证书从 rds-ca-2015 更改为 rds-ca-2019

通过将维护应用于多个数据库实例来更新 CA 证书

使用 Amazon Web Services Management Console 更改多个数据库实例的 CA 证书。

将多个数据库实例的 CA 从 rds-ca-2015 更改为 rds-ca-2019
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

    在导航窗格中,有一个 Certificate update (证书更新) 选项,用于显示受影响的数据库实例的总数。

    
                                    证书轮换导航窗格选项

    在导航窗格中选择 Certificate update (证书更新)

    此时将显示 Update your Amazon RDS SSL/TLS certificates (更新 RDS SSL/TLS 证书) 页面。

    
                                    更新多个数据库实例的 CA 证书
    注意

    该页面仅显示当前 Amazon 区域的数据库实例。如果您在多个 Amazon 区域中有数据库实例,请检查每个 Amazon 区域中的该页面,以查看具有旧 SSL/TLS 证书的所有数据库实例。

  3. 选择要更新的数据库实例。

    您可以通过选择 Update at the next maintenance window (在下一维护时段更新) 来计划下一维护时段的证书轮换。通过选择 Update now (立即更新) 来立即应用轮换。

    重要

    轮换 CA 证书后,该操作会重启数据库实例。

    如果您在证书到期后遇到连接问题,请使用 Update now (立即更新) 选项。

  4. 如果您选择 Update at the next maintenance window (在下一维护时段更新)Update now (立即更新),系统将提示您确认 CA 证书轮换。

    重要

    在计划数据库上的 CA 证书轮换之前,请更新使用 SSL/TLS 和服务器证书进行连接的所有客户端应用程序。这些更新特定于您的数据库引擎。要确定您的应用程序是否使用 SSL/TLS 和服务器证书进行连接,请参阅 Step 2: Update Your Database Applications to Use the New SSL/TLS Certificate。更新这些客户端应用程序后,可以确认 CA 证书轮换。

    
                                    确认证书轮换

    要继续,请选中该复选框,然后选择 Confirm (确认)

  5. 对要更新的每个数据库实例重复步骤 3 和 4。

将证书导入信任存储的示例脚本

以下是将证书捆绑包导入信任存储的示例 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://rds-truststore.s3.cn-north-1.amazonaws.com.cn/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 ".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://rds-truststore.s3.cn-north-1.amazonaws.com.cn/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