轮换 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 使用来自 Amazon Certificate Manager (ACM) 的证书。如果您正在使用 RDS Proxy,当您轮换 SSL/TLS 证书时,您不需要更新使用 RDS Proxy 连接的应用程序。有关在 RDS Proxy 中使用 TLS/SSL 的更多信息,请参阅 将 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 证书标识符运行 Amazon CLI 部分中显示的 modify-db-instance
命令。您可以使用 describe-db-engine-versions
命令找到适用于特定数据库引擎和数据库引擎版本的 CA。
如果您在 2020 年 7 月 28 日之后创建了数据库实例或更新了其证书,则无需执行任何操作。有关更多信息,请参阅 Go GitHub 问题 #39568
通过修改数据库实例来更新 CA 证书
完成以下步骤以更新 CA 证书。
通过修改数据库实例来更新 CA 证书
-
下载新的 SSL/TLS 证书,如 使用 SSL/TLS 加密与数据库实例的连接 中所述。
-
更新应用程序以使用新的 SSL/TLS 证书。
更新应用程序以使用新 SSL/TLS 证书的方法取决于特定的应用程序。请与应用程序开发人员一起更新应用程序的 SSL/TLS 证书。
有关检查 SSL/TLS 连接和更新每个数据库引擎的应用程序的信息,请参阅以下主题:
有关更新 Linux 操作系统信任存储的示例脚本,请参阅将证书导入信任存储的示例脚本。
注意
证书捆绑包包含新旧 CA 证书,因此您可以安全地升级应用程序并在转换期间保持连接。如果您正在使用 Amazon Database Migration Service 将数据库迁移到数据库实例,我们建议您使用证书捆绑包来确保迁移期间的连接性。
-
修改数据库实例,以便将 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
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择数据库,然后选择要修改的数据库实例。
-
选择修改。
将显示 Modify DB Instance (修改数据库实例) 页面。
-
在 Connectivity(连接)部分选择 rds-ca-2019。
-
选择继续,查看修改摘要。
-
要立即应用更改,请选择立即应用。
重要
选择此选项会立即重启数据库。
-
在确认页面上,检查您的更改。如果更改正确无误,请选择 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 证书
-
下载新的 SSL/TLS 证书,如 使用 SSL/TLS 加密与数据库实例的连接 中所述。
-
更新数据库应用程序以使用新的 SSL/TLS 证书。
更新应用程序以使用新 SSL/TLS 证书的方法取决于特定的应用程序。请与应用程序开发人员一起更新应用程序的 SSL/TLS 证书。
有关检查 SSL/TLS 连接和更新每个数据库引擎的应用程序的信息,请参阅以下主题:
有关更新 Linux 操作系统信任存储的示例脚本,请参阅将证书导入信任存储的示例脚本。
注意
证书捆绑包包含新旧 CA 证书,因此您可以安全地升级应用程序并在转换期间保持连接。
-
应用数据库实例维护,以将 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
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases (数据库)。
在导航窗格中,有一个 Certificate update (证书更新) 选项,用于显示受影响的数据库实例的总数。
在导航窗格中选择 Certificate update (证书更新)。
此时将显示 Update your Amazon RDS SSL/TLS certificates (更新 RDS SSL/TLS 证书) 页面。
注意
该页面仅显示当前 Amazon 区域的数据库实例。如果您在多个 Amazon 区域中有数据库实例,请检查每个 Amazon 区域中的该页面,以查看具有旧 SSL/TLS 证书的所有数据库实例。
-
选择要更新的数据库实例。
您可以通过选择 Update at the next maintenance window (在下一维护时段更新) 来计划下一维护时段的证书轮换。通过选择 Update now (立即更新) 来立即应用轮换。
重要
轮换 CA 证书后,该操作会重启数据库实例。
如果您在证书到期后遇到连接问题,请使用 Update now (立即更新) 选项。
-
如果您选择 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 (确认)。
-
对要更新的每个数据库实例重复步骤 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