【问题标题】:AWS RDS Certificate Authority updateAWS RDS 证书颁发机构更新
【发布时间】:2020-02-13 06:28:13
【问题描述】:

我最近收到一封电子邮件,内容涉及对我的 RDS 证书颁发机构进行必要的更新。 RDS 方面的说明看起来很简单:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html

然而,在第 4 步有一条重要消息,“当您安排此操作时,请确保您事先已更新您的客户端信任存储。”

我似乎找不到任何有关更新连接到 RDS 以进行 CA 更新的服务器的信息。

我的设置是 Beanstalk 上的 EC2 实例。

有人知道我应该怎么做吗?
谢谢你。

类似问题:Update Amazon RDS SSL/TLS Certificates - Elastic Beanstalk

【问题讨论】:

    标签: amazon-web-services rds


    【解决方案1】:

    基本上,只有当您使用 SSL 连接从您的应用程序到 RDS 服务器时,才需要安装认证。无论使用何种 SSL 连接,建议更新您服务器的证书,但如果您没有使用与 RDS 的 SSL 连接,则没有必要。

    服务器端使用

    在使用 SSL 连接时,应尽快更改 RDS 服务器的证书。转到 RDS 控制台,然后您可以从左侧菜单列表中找到 证书更新 菜单。找到您的数据库集群,立即检查并更新您的 SSL,或为下次维护保留更新。

    客户端使用

    有关 SSL 证书的详细信息在documentation 中注明。从这里可以下载rds 2019的根CA证书。链接如下。

    https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

    此CA证书用于连接rds服务器,例如

    mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com
    --ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY
    

    或将其添加到客户端操作系统的可信根 CA

    例如在 Windows 中,您可以运行 certmgr.msc 并右键单击受信任的根 ca,导入此证书。在 Mac 中,打开 keychain access 并导入此证书。这是一个选项。

    【讨论】:

    • 如何,我在哪里add it to the "Trusted Root CA" for the client OS
    • 好吧,这不是必需的,但你可以做到。我补充了一点。
    • 这不能回答问题。当您仅上传 zip 并使用自动设置时,任何(也不是您的)说明都不清楚在 Amazon Beanstalk (PaaS) 中做什么。目前尚不清楚您是否需要进入控制台内的 RDS 实例,以及在那里做什么。也不清楚您是否需要在 Beanstalk 或您的环境变量中做一些事情来支持新证书。我将对此进行调查,因为我需要自己做。
    【解决方案2】:

    要在 Amazon (AWS) 的 Elastic Beanstalk 环境中更改您的 CA 证书,请执行以下操作:

    1. 登录您的控制台 (https://console.aws.amazon.com/)
    2. 点击服务并搜索“RDS”
    3. 在 RDS 内部(RDS 是 Beanstalk 中的数据库所在的位置,即使它们直接附加到 Beanstalk 环境)点击右上角的“证书更新”(链接上会出现一条非常阅读的通知)
    4. 如果您有任何证书要升级,它们会显示在这里。
    5. 单击 RDS 实例名称(数据库服务器的奇怪 aws 名称)又名“数据库标识符”
    6. (在里面你可以在配置中看到更多关于它的信息),例如你的数据库用户名,如果你有很多实例并且忘记重命名它们,它可以帮助你识别实例。
    7. 单击操作 > 立即升级(这将立即重新启动您的实例)或操作 > 在下一个窗口升级(如果您有大量流量和很多用户,请选择此选项,这样破坏性会更小,即不会在中间停止白天但晚上根据maintenance schedule of your location/server)
    8. 就是这样。您无需在 Beanstalk 环境中安装任何东西。

    【讨论】:

    • 我认为这被否决了,因为大多数生产环境不使用弹性 beanstalk 中的 RDS。在弹性 beantalk 中使用 RDS 具有潜在危险,因为如果您终止弹性 beantalk 实例,您的数据库也会终止,这不利于数据保留。所以一般来说,人们都在询问 RDS 实例是独立的弹性 beanstalk 环境。
    • 我们在 EC2 实例上的 docker 容器中有 2 个 node.js 应用程序。有关强制升级以获取 RDS 证书的信息很好,但我不知道如何将它们应用到运行 Docker 容器的 EC2 实例中。我们正在使用 Sequelize。有任何想法吗?请帮忙。升级 RDS MySQL 证书会破坏一切。
    • 你可以查看这个博客来更新sequlize - medium.com/soluto-nashville/…,和这个获取最新的CA - docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
    【解决方案3】:

    这就是我们管理从 Elastic Beanstalk 到外部 RDS PostgreSQL 数据库的 SSL 通信的方式。我们将以下配置文件添加到 .ebextensions (.ebextensions/rds.config):

    commands:
      01-create-folder:
        command: mkdir -p /home/webapp/.postgresql
      02-download-cert:
        command: aws s3 cp s3://rds-downloads/rds-ca-2019-root.pem /home/webapp/.postgresql/root.crt
      03-change-owner:
        command: chown webapp:webapp /home/webapp/.postgresql/root.crt
      04-change-mode:
        command: chmod 400 /home/webapp/.postgresql/root.crt
    

    该文件从公共 S3 文件夹下载证书,并作为根证书放置在 .postgresql 文件夹中。我们有一个 Java 应用程序,并且 JDBC 驱动程序成功连接到启用了 SSL 的 RDS。

    【讨论】: