Azure Database for MySQL 的根证书轮换

为了维护安全性和符合性标准,我们开始在 2026 年 1 月 1 日之后更改 Azure Database for MySQL 灵活服务器的根证书。

当前根证书 DigiCert 全局根 CA 替换为两个新的根证书:

  • DigiCert 全局根 G2
  • Microsoft RSA 根证书颁发机构 2017

如果使用传输层安全性(TLS)进行根证书验证,则必须在转换期间安装所有三个根证书。 更换完所有证书后,可以从存储中删除旧的 SHA-1 根证书 DigiCert Global Root CA。 如果未在 2026 年 1 月 1 日之前添加新证书,则与数据库的连接 会失败

本文提供有关如何添加两个新的根证书以及常见问题的解答的说明。

注释

如果继续使用 SHA-1 是一个障碍,您希望在常规推出之前更改证书,请按照 本文中的说明在客户端创建合并的证书颁发机构 (CA) 证书。 然后,打开支持请求来轮换 Azure Database for MySQL 的证书。

为什么需要更新根证书?

Azure Database for MySQL 用户只能使用预定义的证书来连接 MySQL 服务器示例。 这些证书由根证书颁发机构签名。 当前证书由 DigiCert 全局根 CA 签名。 它使用 SHA-1。 由于发现的漏洞,SHA-1 哈希算法非常不安全。 它不再符合我们的安全标准。

我们需要将证书轮换为由合规的根证书颁发机构签名的证书,以修正问题。

如何在客户端上更新根证书存储

为了确保应用程序可以在根证书轮换后连接到 Azure Database for MySQL,请更新客户端上的根证书存储。 如果对根证书验证使用 SSL/TLS,请更新根证书存储。

以下步骤指导你完成在客户端上更新根证书存储的过程:

  1. 下载三个根证书。 如果安装了 DigiCert 全局根 CA 证书,则可以跳过第一次下载:

  2. 下载 DigiCert 全局根 CA 证书

  3. 下载 DigiCert 全局根 G2 证书

  4. 下载 Microsoft RSA 根证书颁发机构 2017 证书

  5. 将下载的证书添加到客户端证书存储。 该过程因客户端类型而异。

更新 Java 客户端

按照以下步骤更新根证书轮换的 Java 客户端证书。

创建新的受信任的根证书存储

对于 Java 用户,请运行以下命令以 创建新的 受信任的根 证书存储

keytool -importcert -alias MySqlFlexServerCACert  -file digiCertGlobalRootCA.crt.pem  -keystore truststore -storepass password -noprompt
keytool -importcert -alias MySqlFlexServerCACert2  -file digiCertGlobalRootG2.crt.pem -keystore truststore -storepass password -noprompt
keytool -importcert -alias MicrosoftRSARootCert2017  -file MicrosoftRSARootCertificateAuthority2017.crt -keystore truststore -storepass password -noprompt

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

  • System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
  • System.setProperty("javax.net.ssl.trustStorePassword","password");

更新现有的受信任的根证书存储

对于 Java 用户,请运行以下命令,将新的受信任根证书添加到 现有的 受信任根 证书存储中:

keytool -importcert -alias MySqlFlexServerCACert2  -file digiCertGlobalRootG2.crt.pem -keystore truststore -storepass password -noprompt
keytool -importcert -alias MicrosoftRSARootCert2017  -file MicrosoftRSARootCertificateAuthority2017.crt -keystore truststore -storepass password -noprompt

如果更新现有密钥存储,则无需更改 javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword 属性。

更新 .NET 客户端

按照以下步骤更新根证书轮换的 .NET 客户端证书。

Windows 上的 .NET

对于 Windows 上的 .NET 用户,请确保受信任的根证书颁发机构下的 Windows 证书存储中存在 DigiCert 全局根 CADigiCert Global Root G2Microsoft RSA 根证书颁发机构 2017。 如果不存在任何证书,请导入它。

Azure Database for MySQL .NET 证书的屏幕截图。

Linux 上的 .NET

对于 Linux SSL_CERT_DIR上使用的 .NET 用户,请确保Microsoft RSA Root Certificate Authority 2017.crt.pemDigiCertGlobalRootCA.crt.pemDigiCertGlobalRootG2.crt.pem且存在于由SSL_CERT_DIR其指示的目录中。 如果不存在任何证书,请创建缺少的证书文件。

运行以下命令将 Microsoft RSA Root Certificate Authority 2017.crt 证书转换为 PEM 格式:

openssl x509 -inform der -in MicrosoftRSARootCertificateAuthority2017.crt -out MicrosoftRSARootCertificateAuthority2017.crt.pem

其他客户端

对于使用其他客户端的其他用户,需要创建包含所有三个根证书的组合证书文件。

其他客户端,例如:

  • MySQL Workbench
  • C 或 C++
  • Go
  • Python
  • Ruby
  • PHP
  • Node.js
  • Perl
  • Swift

Steps

  1. 创建新的文本文件并将其另存为 combined-ca-certificates.pem
  2. 将所有三个证书文件的内容复制并粘贴到以下格式的单个文件中:
-----BEGIN CERTIFICATE-----
(Content from DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Content from DigiCertGlobalRootG2.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Content from MicrosoftRSARootCertificateAuthority2017.crt.pem)
-----END CERTIFICATE-----

MySQL 数据导入复制

对于在 Azure 上托管主副本和副本的数据传入复制,可以采用以下格式合并 CA 证书文件:

SET @cert = '-----BEGIN CERTIFICATE-----
(Root CA1:DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: DigiCertGlobalRootG2.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA3: .crt.pem)
-----END CERTIFICATE-----'

按如下所示调用 mysql.az_replication_change_master

CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, @cert);

重要

重新启动副本服务器。