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

适用于: Azure Database for MySQL - 单一服务器

重要

Azure Database for MySQL 单一服务器即将停用。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 有关如何迁移到 Azure Database for MySQL 灵活服务器的详细信息,请参阅 Azure Database for MySQL 单一服务器发生了什么情况?

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

注意

本文仅适用于 Azure Database for MySQL 单一服务器。 对于 Azure Database for MySQL 灵活服务器,通过 SSL 进行通信所需的证书是 DigiCert 全局根 CA

本文包含对术语“从属”的引用,这是 Microsoft 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。

为什么需要更新根证书?

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

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

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

如果按照下面的创建组合 CA 证书中提到的步骤操作,则只要 BaltimoreCyberTrustRoot 证书未从组合 CA 证书中删除,就可以继续连接。 在收到进一步通知之前,建议在组合的 CA 证书中保留 BaltimoreCyberTrustRoot,以便可以继续连接。

创建组合 CA 证书

若要避免应用程序的可用性因证书被意外吊销而中断,或要更新已吊销的证书,请执行以下步骤。 其思路是创建一个新的 .pem 文件,该文件组合了当前证书和新证书,在 SSL 证书验证期间将使用允许的值之一。 请参考以下步骤:

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

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

    • 对于 Java (MySQL Connector/J) 用户,请执行以下命令:

      keytool -importcert -alias MySQLServerCACert -file D:\BaltimoreCyberTrustRoot.crt.pem -keystore truststore -storepass password -noprompt
      
      keytool -importcert -alias MySQLServerCACert2 -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");
    • 对于 .NET(MySQL Connector/NET、MySQLConnector)用户,请确保 BaltimoreCyberTrustRoot 和 DigiCertGlobalRootG2 都存在于 Windows 证书存储“受信任的根证书颁发机构”中 。 如果有任何证书不存在,请导入缺失的证书。

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

    • 对于其他(MySQL 客户端/MySQL Workbench/C/C++/Go/Python/Ruby/PHP/NodeJS/Perl/Swift)用户,你可以将两个 CA 证书文件合并为以下格式:

      -----BEGIN CERTIFICATE-----
      (Root CA1: BaltimoreCyberTrustRoot.crt.pem)
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      (Root CA2: DigiCertGlobalRootG2.crt.pem)
      -----END CERTIFICATE-----
      
  3. 将原始根 CA pem 文件替换为组合的根 CA 文件,然后重启应用程序/客户端。

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

注意

在证书更改完成之前,请勿删除或更改 Baltimore 证书。 更改完成后,我们将发送讯息,在此之后即可删除 Baltimore 证书。

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

连接到 Azure Database for MySQL 服务器时,开始遇到连接错误。 需要再次使用 BaltimoreCyberTrustRoot 证书配置 SSL 才能保持连接。

常见问题解答

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

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

我的单服务器实例何时会发生根证书更改?

自“2022 年 10 月”起,将分阶段跨 Azure 的所有区域执行从 BaltimoreCyberTrustRoot 到 DigiCertGlobalRootG2的迁移。 若要确保不会失去与服务器的连接,请按照“创建组合 CA 证书”下提到的步骤操作。 组合 CA 证书将允许通过 SSL 与具有这两个证书之一的单一服务器实例建立连接。

何时可以完全删除 BaltimoreCyberTrustRoot 证书?

在所有 Azure 区域中成功完成迁移后,我们会发送一个通信帖子,以便安全地更改单个 CA DigiCertGlobalRootG2 证书。

我在通过 SSL 连接到单一服务器实例时不指定任何 CA 证书,是否仍需要执行上述步骤

如果在受信任的根存储中同时有两种 CA 根证书,则无需执行进一步操作。 这也适用于使用本地存储访问根 CA 证书的客户端驱动程序。

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

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

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

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

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

如果你使用的客户端会将连接字符串提取出来,请查看客户端的文档,了解它是否会验证证书。

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

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

  • 此新证书已在平台级别添加到应用服务。 如果你在应用程序中使用应用服务平台上包含的 SSL 证书,则无需执行任何操作。 这是最常见的情况。
  • 如果你在代码中显式包含 SSL 证书文件的路径,则需要下载新证书,生成如上所述的组合证书并使用证书文件。 这种情况的一个很好的示例是在应用服务中使用自定义容器,如同应用服务文档中所述。 这是不常见的情况,但我们已了解到一些用户正在使用它。

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

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

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

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

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

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

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

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

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

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

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

如果我使用的是数据传入复制,是否需要执行任何操作?

如果你使用数据传入复制来连接到 Azure Database for MySQL,则需要考虑以下两个事项:

  • 如果数据复制是从虚拟机(本地或 Azure 虚拟机)到 Azure Database for MySQL,则需要检查是否使用了 SSL 来创建副本。 运行 SHOW SLAVE STATUS 并检查以下设置。

    Master_SSL_Allowed            : Yes
    Master_SSL_CA_File            : ~\azure_mysqlservice.pem
    Master_SSL_CA_Path            :
    Master_SSL_Cert               : ~\azure_mysqlclient_cert.pem
    Master_SSL_Cipher             :
    Master_SSL_Key                : ~\azure_mysqlclient_key.pem
    

    如果看到为CA_file、SSL_Cert和SSL_Key提供了证书,则需要通过添加新 证书 并创建组合证书文件来更新该文件。

  • 如果数据复制位于两个 Azure Database for MySQL 服务器之间,则需要通过执行 CALL mysql.az_replication_change_master 重置副本,并提供新的双根证书作为最后一个参数 master_ssl_ca

是否有服务器端查询可用于确定是否在使用 SSL?

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

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

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

如果在 enableRedirect 中使用 PHP 驱动程序,为什么需要更新根证书?

为了满足合规性要求,主机服务器的 CA 证书已从 BaltimoreCyberTrustRoot 更改为 DigiCertGlobalRootG2。 进行此更新后,结合使用 PHP 客户端驱动程序和 enableRedirect 的数据库连接无法再连接到服务器,因为客户端设备无法知晓证书更改和新根 CA 的详细信息。 使用 PHP 重定向驱动程序的客户端设备可以绕过网关,直接连接到主机服务器。 有关 Azure Database for MySQL 单一服务器体系结构的详细信息,请参阅此链接

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

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