Azure Database for MySQL 灵活服务器的根证书轮换

Important

根证书轮换计划:

  • 从 2026 年 3 月 9 日起,针对中国区域的根 CA 证书,将从 DigiCert 全球根 CA (G1) 更新为 DigiCert 全球根 G2。
  • 如果客户端 配置使用 TLS 的建议配置,则无需执行任何作。

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

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

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

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

注释

如果继续使用 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. 将下载的证书添加到客户端证书存储。 该过程因客户端类型而异。

更新 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.trustStore 和 javax.net.ssl.trustStorePassword 属性。

更新 .NET 客户端

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

Windows 上的 .NET

对于 Windows 上的 .NET 用户,请确保 DigiCert Global Root CA、DigiCert Global Root G2 和 Microsoft RSA Root Certificate Authority 2017 存在于 Windows 证书存储中的 受信任的根证书颁发机构。 如果不存在任何证书,请导入它。

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

Linux 上的 .NET

对于在 Linux 上使用SSL_CERT_DIR的 .NET 用户,请确保DigiCertGlobalRootCA.crt.pem、DigiCertGlobalRootG2.crt.pem和Microsoft RSA Root Certificate Authority 2017.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 工作台
  • C 或 C++
  • Go
  • Python
  • Ruby
  • PHP
  • Node.js
  • Perl
  • Swift

步骤

  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);

Important

重新启动副本服务器。