为了维护安全性和符合性标准,我们将在 2025 年 7 月 31 日之后开始更改 Azure Database for MySQL 灵活服务器的根证书。
当前根证书 DigiCert 全局根 CA 将替换为两个新证书:
- DigiCert 全局根 G2
- Microsoft RSA 根证书颁发机构 2017
如果使用传输层安全性(TLS)进行根证书验证,则必须在过渡期间安装所有三个根证书。 更换完所有证书后,可以从存储中删除旧的 SHA-1 根证书 DigiCert Global Root CA。 将两个新证书添加到现有存储库。 如果在 2025 年 7 月 31 日之前未添加新证书,则与数据库的连接将 失败。
本文提供了有关如何添加新根证书的更多说明。 关于更改,以及解答常见问题
注释
如果继续使用 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 用户,请运行以下命令以 创建新的 受信任的根 证书存储:
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
属性。对于 Windows 上的 .NET 用户,请确保 DigiCert Global Root CA、DigiCert Global Root G2 和 Microsoft RSA 根证书颁发机构 2017 存在于 Windows 证书存储的 受信任的根证书颁发机构下。 如果不存在任何证书,请导入它。
对于在 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)用户,可以采用以下格式合并 CA 证书文件:
-----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-----
如何知道是否使用 SSL/TLS 进行根证书验证?
可以通过查看连接字符串来识别连接是否验证根证书:
- 如果连接字符串包含
sslmode=verify-ca
或sslmode=verify-identity
需要更新受信任的根证书。 - 如果连接字符串包括
sslmode=disable
、sslmode=allow
或sslmode=prefer
sslmode=require
不需要更新受信任的根证书。 - 如果未指定
sslmode
连接字符串,则无需更新证书。
如果你使用的客户端会将连接字符串提取出来,请查看客户端的文档,了解它是否会验证证书。
是否可以使用服务器端查询来验证我是否使用的是 SSL?
若要验证是否使用 SSL 连接连接到服务器,请参阅 “验证 TLS/SSL 连接”。
常见问题
如果我删除 DigiCert 全局根 CA 证书,该怎么办?
如果在Microsoft证书轮换之前删除证书,则连接将失败。 将 DigiCert 全局根 CA 证书添加回客户端证书存储,以还原连接。
如何确保在下载 DigiCert 全局根 G2 证书后建立 MySQL 连接?
根证书更改后,新生成的证书将推送到服务器。 下次重启服务器后,将使用新证书。 如果遇到连接问题,请检查上述说明的执行过程是否有错误。
如果我未使用 SSL/TLS,我是否需要更新根证书?
否。 如果不使用 SSL/TLS,则无需执行任何操作。
如果使用的是 SSL/TLS,是否需要重启数据库服务器来更新根证书?
否。 如果使用 SSL/TLS,则无需重启数据库服务器以开始使用新证书。
证书更新是由客户端进行的更改。 传入客户端连接需要使用新证书来确保它们可以连接到数据库服务器。
此更改是否需要我计划数据库服务器的维护停机时间?
否。 由于更改仅在客户端连接到数据库服务器,因此它不需要对数据库服务器造成任何维护停机。
根证书轮换是否有回滚计划?
如果应用程序在证书轮换后遇到问题,请根据用例重新安装组合证书或基于 SHA-2 的证书来替换证书文件。 建议不要回滚更改,因为更改是必需的。
Azure Database for MySQL 使用的证书是否可信?
Azure Database for MySQL 使用的证书来自受信任的证书颁发机构。 我们对这些证书的支持基于 CA 为其提供的支持。
DigiCert 全局根 CA 证书使用不太安全的 SHA-1 哈希算法会损害连接到 Azure Database for MySQL 的应用程序的安全性。 这就是我们需要执行证书更改的原因。
DigiCert 全局根 G2 证书是否与单服务器部署选项使用的证书相同?
是的。 DigiCert 全局根 G2 证书(Azure Database for MySQL 的基于 SHA-2 的根证书)与单一服务器部署选项使用的证书相同。
如果我使用的是只读副本,是否需要仅在源服务器上执行此更新,还是也要在只读副本上执行?
由于此更新是客户端更改,因此,如果多个客户端从副本服务器读取数据,则还需要为这些客户端应用更改。
如果使用数据传入复制,是否需要执行任何操作?
如果使用 数据传入复制 连接到 Azure Database for MySQL,并且数据复制位于两个 Azure Database for MySQL 数据库之间,则需要通过运行 CALL mysql.az_replication_change_master
来重置副本。 提供三元双根证书作为最后一个参数 ,master_ssl_ca。
如果我已有包含DigiCert Global Root G2
和Microsoft Root Certificate Authority 2017
的证书文件,是否需要执行任何措施?
否。 如果您的证书文件中已经包含了 DigiCert Global Root G2
证书和 Microsoft Root Certificate Authority 2017
证书,则无需采取任何行动。
如果我有更多问题怎么办?
如果仍有疑问,可以提出支持请求。