为了维护安全性和符合性标准,我们开始在 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,请更新根证书存储。
以下步骤指导你完成在客户端上更新根证书存储的过程:
下载三个根证书。 如果安装了 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 全局根 CA、DigiCert Global Root G2 和 Microsoft RSA 根证书颁发机构 2017。 如果不存在任何证书,请导入它。
Linux 上的 .NET
对于 Linux SSL_CERT_DIR
上使用的 .NET 用户,请确保Microsoft RSA Root Certificate Authority 2017.crt.pem
DigiCertGlobalRootCA.crt.pem
DigiCertGlobalRootG2.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
- 创建新的文本文件并将其另存为
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);
重要
重新启动副本服务器。