亚马逊AWS官方博客
立即轮换您的 SSL/TLS 证书 — Amazon RDS 和 Amazon Aurora 将于 2024 年到期
如果您在 Amazon Relational Database Service(Amazon RDS)控制台中看到证书更新,不必惊讶。
如果您使用或计划使用带有证书验证的安全套接字层(SSL)或传输层安全性协议(TLS)连接到 Amazon RDS for MySQL、MariaDB、SQL Server、Oracle、PostgreSQL 和 Amazon Aurora 的数据库实例,则意味着您应该在根证书到期之前在数据库实例和应用程序中轮换新的证书颁发机构(CA)证书。
您的数据库实例的大多数 SSL/TLS 证书(rds-ca-2019
)都将在 2020 年证书更新后于 2024 年到期。2022 年 12 月,我们发布了新的 CA 证书,有效期为 40 年(rds-ca-rsa2048-g1
)和 100 年(rds-ca-rsa4096-g1
和 rds-ca-ecc384-g1
)。因此,如果您轮换 CA 证书,则在很长一段时间内无需再次执行此操作。
以下是 rds-ca-2019
的受影响区域及其到期日的列表:
到期日 | 区域 |
2024 年 5 月 8 日 | 中东(巴林) |
2024 年 8 月 22 日 | 美国东部(俄亥俄州)、美国东部(弗吉尼亚州北部)、美国西部(北加利福尼亚)、美国西部(俄勒冈州)、亚太地区(孟买)、亚太地区(大阪)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)、加拿大(中部)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、欧洲地区(伦敦)、欧洲地区(米兰)、欧洲地区(巴黎)、欧洲地区(斯德哥尔摩)和南美洲(圣保罗) |
2024 年 9 月 9 日 | 中国(北京)、中国(宁夏) |
2024 年 10 月 26 日 | 非洲(开普敦) |
2024 年 10 月 28 日 | 欧洲地区(米兰) |
在 2061 年前不受影响 | 亚太地区(香港)、亚太地区(海得拉巴)、亚太地区(雅加达)、亚太地区(墨尔本)、欧洲(西班牙)、欧洲(苏黎世)、以色列(特拉维夫)、中东(阿联酋)、AWS GovCloud(美国东部)和 AWS GovCloud(美国西部) |
以下步骤演示如何轮换证书以保持应用程序与数据库实例的连接。
第 1 步 — 确定受影响的 Amazon RDS 资源
正如我所说,您可以在 Amazon RDS 控制台的证书更新页面中确定受影响的数据库实例的总数,并查看所有受影响的数据库实例。注意:此页面仅显示当前区域的数据库实例。如果您在多个区域拥有数据库实例,请查看每个区域的证书更新页面,了解所有使用旧 SSL/TLS 证书的数据库实例。
您也可以使用 AWS 命令行界面(AWS CLI),调用 describe-db-instances
来查找使用即将到期的 CA 的实例。该查询将显示您的账户和 us-east-1
区域中的 RDS 实例列表。
$ aws rds describe-db-instances --region us-east-1 |
jq -r '.DBInstances[] |
select ((.CACertificateIdentifier != "rds-ca-rsa2048-g1") and
(.CACertificateIdentifier != "rds-ca-rsa4096-g1") and
(.CACertificateIdentifier != "rds-ca-ecc384-g1")) |
"DBInstanceIdentifier:
(.DBInstanceIdentifier), CACertificateIdentifier:
(.CACertificateIdentifier)"'
步骤 2 — 更新数据库客户端和应用程序
在数据库实例上应用新证书之前,应更新使用 SSL/TLS 和服务器证书进行连接的所有客户端和应用程序的信任存储。 目前,数据库实例本身并没有简单的方法可以确定您的应用程序是否需要进行证书验证以满足连接的先决条件。这时只能选择检查应用程序的源代码或配置文件。
尽管特定于数据库引擎的文档概述了需要在最常见的数据库连接界面中寻找的内容,但我们强烈建议您与应用程序开发人员合作,以确定是否使用了证书验证,以及更新特定应用程序的客户端应用程序的 SSL/TLS 证书的正确方法。
要更新应用程序的证书,您可以使用包含旧 CA 和新 CA 证书的新证书包,这样您就可以在过渡期间安全地升级应用程序并保持连接。
有关检查 SSL/TLS 连接和更新每个数据库引擎的应用程序的信息,请参阅以下主题:
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 MariaDB 数据库实例
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 Microsoft SQL Server 数据库实例
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 MySQL DB 实例
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 Oracle 数据库实例
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 PostgreSQL 数据库实例
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 Aurora MySQL 数据库集群。
- 将应用程序更新为使用新的 SSL/TLS 证书连接至 Aurora PostgreSQL 数据库集群。
步骤 3 — 在非生产 RDS 实例上测试 CA 轮换
如果您在所有信任存储库中更新了新证书,则应在非生产环境中使用 RDS 实例进行测试。在数据库引擎和版本与生产环境相同的开发环境中进行此设置。此测试环境还应使用与生产环境相同的代码和配置进行部署。
要在测试数据库实例中轮换新证书,请在 Amazon RDS 控制台中为要修改的数据库实例选择修改。
在连接部分中,选择 rds-ca-rsa2048-g1
。
选择继续以查看修改摘要。如果要立即应用更改,请选择立即应用。
要使用 AWS CLI 将数据库实例的 CA 从 rds-ca-2019
更改为 rds-ca-rsa2048-g1
,请调用 modify-db-instance
命令并使用 --ca-certificate-identifier
选项指定数据库实例标识符。
$ aws rds modify-db-instance \
--db-instance-identifier <mydbinstance> \
--ca-certificate-identifier rds-ca-rsa2048-g1 \
--apply-immediately
这与在生产数据库实例中手动轮换新证书的方法相同。确保您的应用程序在使用您引用的信任存储或 CA 证书捆绑包进行轮换后,使用 SSL/TLS 重新连接时不会出现任何问题。
当您创建新的数据库实例时,默认 CA 仍为 rds-ca-2019
,直到 2024 年 1 月 25 日才会更改为 rds-ca-rsa2048-g1
。要将新 CA 设置为创建新数据库实例,您可以设置 CA 覆盖以确保启动的所有新实例都使用您选择的 CA。
$ aws rds modify-certificates \
--certificate-identifier rds-ca-rsa2048-g1 \
--region <region name>
您应该在拥有 RDS 数据库实例的所有区域中执行此操作。
步骤 4 — 安全更新您的生产 RDS 实例
在非生产环境中完成测试后,可以在生产环境中开始轮换 RDS 数据库 CA 证书。您可以手动轮换数据库实例,如步骤 3 所示。值得注意的是,尽管许多现代发动机不需要重启,但最好还是将轮换安排在维护时段。
在步骤 1 的“证书更新”页面中,选择要轮换的数据库实例。通过选择计划,您可以为下一个维护时段安排证书轮换。选择立即应用即可立即应用轮换。
如果您选择计划,则系统会提示您确认证书轮换。此提示还会说明您的更新的预定时段。
证书更新后(立即或在维护时段内更新),应确保数据库和应用程序继续按预期运行。
大多数现代数据库引擎不需要重启数据库即可更新证书。如果您不想仅仅为了更新 CA 而重启数据库,则可以在 modify-db-instance
命令中使用 --no-certificate-rotation-restart
标志。
$ aws rds modify-db-instance \
--db-instance-identifier <mydbinstance> \
--ca-certificate-identifier rds-ca-rsa2048-g1 \
--no-certificate-rotation-restart
要检查您的引擎是否需要重启,可以查看 describe-db-engine-versions
命令输出中的 SupportsCertificateRotationWithoutRestart
字段。您可以使用此命令来查看哪些引擎无需重启即可支持轮换:
$ aws rds describe-db-engine-versions \
--engine <engine> --include-all --region <region> |
jq -r '.DBEngineVersions[] |
"EngineName: (.Engine),
EngineVersion: (.EngineVersion),
SupportsCertificateRotationWithoutRestart: (.SupportsCertificateRotationWithoutRestart),
SupportedCAs: ([.SupportedCACertificateIdentifiers |
join(", ")])"'
即使您没有对数据库实例使用 SSL/TLS,我也建议您轮换 CA。将来您可能需要使用 SSL/TLS,而某些数据库连接器(例如 JDBC 和 ODBC 连接器)在连接之前会检查有效证书,而使用过期的 CA 可能会阻止您进行连接。
要了解如何通过手动修改数据库实例、自动服务器证书轮换以及查找将证书导入信任存储的示例脚本来更新证书,请参阅《Amazon RDS 用户指南》或《Amazon Aurora 用户指南》。
注意事项
这里需要牢记以下几点:
- Amazon RDS 代理和 Amazon Aurora Serverless 使用来自 AWS Certificate Manager(ACM)的证书。如果您在轮换 SSL/TLS 证书时使用的是 Amazon RDS 代理,则无需更新使用 Amazon RDS 代理连接的应用程序。如果您使用的是 Aurora Serverless,则不需要轮换 SSL/TLS 证书。
- 即日起至 2024 年 1 月 25 日,新的 RDS 数据库实例将默认拥有
rds-ca-2919
证书,除非您通过create-db-instance
API 上的ca-certificate-identifier
选项指定其他 CA;或者如上节所述,为账户指定默认 CA 替代项。从 2024 年 1 月 26 日起,任何新的数据库实例默认情况下都将使用rds-ca-rsa2048-g1
证书。如果您希望新实例使用其他证书,则可以在 AWS 管理控制台或 AWS CLI 中指定要使用的证书。有关更多信息,请参阅create-db-instance
API 文档。 - 除了 Amazon RDS for SQL Server 之外,在最新版本中,大多数现代 RDS 和 Aurora 引擎都支持在不重启数据库的情况下轮换证书。调用
describe-db-engine-versions
并查看响应字段SupportsCertificateRotationWithoutRestart
。如果此字段设置为true
,则您的实例无需重启数据库即可更新 CA。如果设置为false
,则需要重启。有关更多信息,请参阅 AWS 文档中的为数据库设置 CA。 - 您的轮换 CA 会为每个数据库实例上的数据库服务器证书签名。数据库服务器证书将数据库实例标识为可信服务器。数据库服务器证书的有效期取决于数据库引擎和版本,可以是 1 年或 3 年。如果您的 CA 支持自动服务器证书轮换,则 RDS 会自动处理数据库服务器证书的轮换。有关数据库服务器证书轮换的更多信息,请参阅 AWS 文档中的自动服务器证书轮换。
- 您可以选择使用 40 年有效期的证书(
rds-ca-rsa2048-g1
),也可以选择 100 年有效期的证书。您的 RDS 实例使用的即将到期的 CA 使用 RSA2048 密钥算法和 SHA256 签名算法。rds-ca-rsa2048-g1
使用完全相同的配置,因此从兼容性的角度来说最为适合。100 年有效期的证书(rds-ca-rsa4096-g1
和rds-ca-ecc384-g1
)使用的加密方案比rds-ca-rsa2048-g1
更安全。如果要使用它们,则应在预生产环境中进行全面的测试,以仔细检查您的数据库客户端和服务器是否支持您所在区域的必要加密方案。
即刻行动!
即使距离证书到期还有一年的时间,您也应该开始与您的团队一起制定计划。更新 SSL/TLS 证书可能需要在到期日之前重启数据库实例。我们强烈建议您安排在到期日之前更新应用程序,并且先在暂存或预生产数据库环境中运行测试,然后再在生产环境中执行这些步骤。要了解有关更新 SSL/TLS 证书的更多信息,请参阅《Amazon RDS 用户指南》和《Amazon Aurora 用户指南》。
如果您没有使用 SSL/TLS 连接,请注意,数据库安全的最佳实践是使用 SSL/TLS 连接,并在连接身份验证过程中请求证书验证。要了解有关使用 SSL/TLS 加密数据库实例连接的更多信息,请参阅《Amazon RDS 用户指南》和《Amazon Aurora 用户指南》。
如果您有任何疑问或问题,请根据您的支持计划,通过您通常使用的 AWS Support 联系方式与我们联系。
— Channy