你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为了维护安全性和符合性标准,我们在 2025 年 9 月 1 日之后开始更改 Azure Database for MySQL 灵活服务器的根证书。
当前根证书 DigiCert 全局根 CA 替换为两个新的根证书:
- DigiCert 全局根 G2
- Microsoft RSA 根证书颁发机构 2017
如果使用传输层安全性(TLS)进行根证书验证,则必须在转换期间安装所有三个根证书。 更换完所有证书后,可以从存储中删除旧的 SHA-1 根证书 DigiCert Global Root CA。 如果未在 2025 年 9 月 1 日之前添加新证书,则与数据库的连接 会失败。
本文提供有关如何添加两个新的根证书以及常见问题的解答的说明。
Note
如果继续使用 SHA-1 是一个障碍,您希望在常规推出之前更改证书,请按照 本文中的说明在客户端创建合并的证书颁发机构 (CA) 证书。 然后,打开支持请求来轮换 Azure Database for MySQL 的证书。
为什么需要更新根证书?
Azure Database for MySQL 用户只能使用预定义的证书来连接 MySQL 服务器示例。 这些证书由根证书颁发机构签名。 当前证书由 DigiCert 全局根 CA 签名。 它使用 SHA-1。 由于发现的漏洞,SHA-1 哈希算法非常不安全。 它不再符合我们的安全标准。
我们需要将证书轮换为由合规的根证书颁发机构签名的证书,以修正问题。
如何在客户端上更新根证书存储
为了确保应用程序可以在根证书轮换后连接到 Azure Database for MySQL,请更新客户端上的根证书存储。 如果您正在使用带有根证书验证的 SSL/TLS,请更新根证书存储区。
以下步骤指导你完成在客户端上更新根证书存储的过程:
下载三个根证书。 如果安装了 DigiCert 全局根 CA 证书,则可以跳过第一次下载:
将下载的证书添加到客户端证书存储。 该过程因客户端类型而异。
更新 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 用户,请确保 Windows 证书存储中的 DigiCert Global Root CA、DigiCert Global Root G2 和 Microsoft RSA Root Certificate Authority 2017 存在于 受信任的根证书颁发机构 下。 如果不存在任何证书,请导入它。
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 Workbench
- C 或 C++
- Go
- Python
- Ruby
- PHP
- Node.js
- Perl
- Swift
步骤
- 创建新的文本文件并将其另存为
combined-ca-certificates.pem - 将所有三个证书文件的内容复制并粘贴到以下格式的单个文件中:
-----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
重新启动副本服务器。
