您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

了解 Azure Database for PostgreSQL 单一服务器的根 CA 更改中的更改

作为标准维护和安全最佳做法的一部分,Azure Database for PostgreSQL 单一服务器已于 2021 年 2 月 15 日 (2021/02/15) 成功完成根证书更改。 本文提供了有关更改、受影响的资源的更多详细信息,以及确保应用程序始终与数据库服务器连接所需执行的步骤。

为什么需要更新根证书?

Azure Database for PostgreSQL 用户只能使用预定义的证书来连接其位于此处的 PostgreSQL 服务器。 但是,证书颁发机构 (CA) 浏览器论坛 最近发布的报告表明,由 CA 供应商颁发的多个证书不符合标准。

根据行业的合规性要求,CA 供应商已开始吊销不符合标准的 CA 的 CA 证书,要求服务器使用由符合标准的 CA 颁发的证书,并由这些符合标准的 CA 颁发的 CA 证书进行签名。 由于 Azure Database for MySQL 使用其中一个不符合标准的证书,因此我们需要将证书轮换到合规版本,以最大程度减少对 MySQL 服务器的潜在威胁。

新证书已推出,自 2021 年 2 月 15 日 (2021/02/15) 起生效。

2021 年 2 月 15 日 (2021/02/15) 进行了哪些更改?

2021 年 2 月 15 日,已将 BaltimoreCyberTrustRoot 根证书替换为同一 BaltimoreCyberTrustRoot 根证书的合规版本,以确保现有客户无需更改任何内容,并且不会影响他们与服务器的连接。 在此更改过程中,BaltimoreCyberTrustRoot 根证书未替换为 DigiCertGlobalRootG2,并且推迟了该更改,以使客户有更多时间进行更改。

我是否需要在客户端上进行任何更改以维护连接?

客户端不需要进行任何更改。 如果遵循以下之前的建议,只要未从组合的 CA 证书中删除 BaltimoreCyberTrustRoot 证书,就仍然可以继续连接。 在收到有关维护连接的进一步通知之前,建议不要从组合的 CA 证书中删除 BaltimoreCyberTrustRoot。

先前的建议

  • 从以下链接下载 BaltimoreCyberTrustRoot 和 DigiCertGlobalRootG2 根 CA:

  • 生成组合的 CA 证书存储,其中同时包含 BaltimoreCyberTrustRootDigiCertGlobalRootG2 证书。

    • 对于使用 DefaultJavaSSLFactory 的 Java (PostgreSQL JDBC) 用户,请执行:

      keytool -importcert -alias PostgreSQLServerCACert  -file D:\BaltimoreCyberTrustRoot.crt.pem  -keystore truststore -storepass password -noprompt
      
      keytool -importcert -alias PostgreSQLServerCACert2  -file D:\DigiCertGlobalRootG2.crt.pem -keystore truststore -storepass password  -noprompt
      

      然后,将原始密钥存储文件替换为新生成的密钥存储文件:

      • System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
      • System.setProperty("javax.net.ssl.trustStorePassword","password");
    • 对于 Windows 上的 .NET (Npgsql) 用户,请确保 Baltimore CyberTrust 根和 DigiCert 全局根 G2 都存在于 Windows 证书存储“受信任的根证书颁发机构”中 。 如果有任何证书不存在,请导入缺失的证书。

      Azure Database for PostgreSQL .net 证书

    • 对于 Linux 上使用 SSL_CERT_DIR 的 .NET (Npgsql) 用户,请确保 BaltimoreCyberTrustRoot 和 DigiCertGlobalRootG2 都存在于 SSL_CERT_DIR 指示的目录中 。 如果有任何证书不存在,请创建缺失的证书文件。

    • 对于其他 PostgreSQL 客户端用户,你可以按以下格式合并两个 CA 证书文件


      -----BEGIN CERTIFICATE-----
      (Root CA1: BaltimoreCyberTrustRoot.crt.pem)
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      (Root CA2:DigiCertGlobalRootG2.crt.pem)
      -----END CERTIFICATE-----

  • 将原始根 CA pem 文件替换为组合的根 CA 文件,然后重启应用程序/客户端。

  • 将来,在服务器端部署新证书后,可以将 CA pem 文件更改为 DigiCertGlobalRootG2.crt.pem。

备注

在证书更改完成之前,请勿删除或更改 Baltimore 证书。 更改完成后,我们会发送讯息,之后用户便可以安全地删除 Baltimore 证书。

为什么在 2021 年 2 月 15 日进行此更改期间,未将 BaltimoreCyberTrustRoot 证书替换为 DigiCertGlobalRootG2?

我们评估了客户对此更改的准备情况,意识到很多客户都需要额外的准备时间来完成此更改。 为了给客户提供更多的准备时间,我们决定把“证书更改为 DigiCertGlobalRootG2”的时限推迟至少一年,以便为客户和最终用户提供充足的准备时间。

我们对用户的建议是,使用上述步骤创建组合的证书并连接到服务器,且在我们发送“将 BaltimoreCyberTrustRoot 证书删除”的讯息之前,不要将其删除。

如果删除了 BaltimoreCyberTrustRoot 证书会怎么样?

在连接到 Azure Database for PostgreSQL 服务器时,会开始出现连接错误。 需要再次使用 BaltimoreCyberTrustRoot 证书配置 SSL 以保持连接。

常见问题

1.如果我不使用 SSL/TLS,是否仍需要更新根 CA?

如果不使用 SSL/TLS,则无需执行任何操作。

2.如果我使用 SSL/TLS,是否需要重启数据库服务器来更新根 CA?

不需要,你无需重启数据库服务器即可开始使用新证书。 这是客户端更改,传入的客户端连接需要使用新证书来确保它们可以连接到数据库服务器。

3.如何知道是否使用 SSL/TLS 进行根证书验证?

通过查看连接字符串,可以确定连接是否验证根证书。

  • 如果你的连接字符串包含 sslmode=verify-casslmode=verify-full,则你需要更新证书。
  • 如果你的连接字符串包含 sslmode=disablesslmode=allowsslmode=prefersslmode=require,则你不需要更新证书。
  • 如果你的连接字符串未指定 sslmode,则你不需要更新证书。

如果你使用的客户端将连接字符串提取出来,请查看客户端的文档,以了解它是否验证证书。 若要了解 PostgreSQL sslmode,请参阅 PostgreSQL 文档中的 SSL 模式说明

4.如果将应用服务与 Azure Database for PostgreSQL 一起使用,会产生什么影响?

对于连接到 Azure Database for PostgreSQL 的 Azure 应用服务,可以采用两种可能的方案,具体取决于你在应用程序中使用 SSL 的方式。

  • 此新证书已在平台级别添加到应用服务。 如果你在应用程序中使用应用服务平台上包含的 SSL 证书,则无需执行任何操作。
  • 如果你在代码中显式包含 SSL 证书文件的路径,则需要下载新证书并更新代码以使用新证书。这种情况的一个很好的示例是在应用服务中使用自定义容器,如应用服务文档中所述

5.如果将 Azure Kubernetes 服务 (AKS) 与 Azure Database for PostgreSQL 一起使用,会产生什么影响?

如果尝试使用 Azure Kubernetes 服务 (AKS) 连接到 Azure Database for PostgreSQL,这与从专用客户主机环境访问类似。 请参考此处的步骤。

6.使用 Azure 数据工厂连接到 Azure Database for PostgreSQL 会产生什么影响?

对于使用 Azure Integration Runtime 的连接器,连接器在 Azure 托管的环境中利用 Windows 证书存储中的证书。 这些证书已与新应用的证书兼容,因此不需要执行任何操作。

对于使用自承载 Integration Runtime 的连接器,你在连接字符串中显式包含 SSL 证书文件的路径,因此需要下载新证书并更新连接字符串以使用该证书。

7.是否需要为此更改计划数据库服务器维护停机时间?

否。 由于此处的更改仅发生在要连接到数据库服务器的客户端,因此数据库服务器不需要维护停机时间来进行此更改。

8.如果我在 2021 年 2 月 15 日 (2021/02/15) 之后创建新的服务器,我是否会受影响?

对于在 2021 年 2 月 15 日 (2021/02/15) 之后创建的服务器,将继续为应用程序使用 BaltimoreCyberTrustRoot,通过 SSL 进行连接。

9.Microsoft 更新其证书的频率是多少?或者说过期策略是怎样的?

Azure Database for PostgreSQL 使用的这些证书是由受信任的证书颁发机构 (CA) 提供的。 因此,这些证书的支持与 CA 对这些证书的支持相关联。 BaltimoreCyberTrustRoot 证书计划于 2025 年到期,因此 Microsoft 需要在到期前执行证书更改。 此外,如果这些预定义证书中存在未预见的 bug,Microsoft 将需要尽早执行证书轮换(类似于在 2021 年 2 月 15 日执行的更改),以确保服务始终安全且合规。

10.如果我使用的是只读副本,是否只需在主服务器或只读副本上执行此更新?

由于此更新是客户端更改,因此,如果客户端过去从副本服务器读取数据,则还需要对这些客户端应用更改。

11.是否有服务器端查询可用来验证是否正在使用 SSL?

若要验证是否正在使用 SSL 连接来连接到服务器,请参阅 SSL 验证

12.如果我的证书文件中已有 DigiCertGlobalRootG2,是否需要执行任何操作?

否。 如果你的证书文件已经有 DigiCertGlobalRootG2,则无需执行任何操作。

13.如果使用 Microsoft 提供的 PgBouncer 挎斗的 docker 映像,会怎么样?

同时支持 BaltimoreDigiCert 的新 docker 映像已发布到此处(最新标签) 。 可以提取此新映像,以避免在 2021 年 2 月 15 日后开始出现连接中断。

14.如果我有其他问题,该怎么办?

如果有疑问,请从 Microsoft Q&A 中的社区专家那里获取解答。 如果你有支持计划并需要技术帮助,请联系我们