v12 升级后 Azure SQL 数据库 TLS 握手错误
Azure SQL 数据库实例升级到 v12 后,您可能会遇到 TLS 握手错误。当服务器提供的证书与客户端连接字符串中指定的主机名不匹配时,就会发生此错误。
错误详细信息
错误消息通常表示证书对于客户端连接中使用的主机名以外的主机名有效。例如:
TLS Handshake failed: x509: certificate is valid for tr12.northcentralus1-a.worker.database.windows.net, *.tr12.northcentralus1-a.worker.database.windows.net, not [server-name].database.windows.net
解决方案
要解决此问题,请更新客户端连接字符串以包含以下参数:
更新的连接字符串
更新的连接字符串应如下所示:
Server=[server-name].database.windows.net;Port=1433;Database=[dbname];User ID=[user];Password=[pass];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;TrustServerCertificate=True;hostNameInCertificate=*.database.windows.net;
说明
在以前版本的 Azure SQL 数据库中,服务器的证书始终与客户端连接字符串中指定的主机名匹配。然而,在 v12 中,这一点不再得到保证。通过将 TrustServerCertificate 设置为 True 并在 hostNameInCertificate 中指定正确的主机名,您可以指示客户端接受证书并正确建立连接。
注意:
虽然Azure 门户建议将 TrustServerCertificate 设置为 False,这在某些情况下可能会导致 TLS 握手错误。如果您遇到这些错误,请将 TrustServerCertificate 设置为 True 并将 hostNameInCertificate 添加到连接字符串应该可以解决问题。
以上是将 Azure SQL 数据库升级到 v12 后,为什么会出现 TLS 握手错误?的详细内容。更多信息请关注PHP中文网其他相关文章!