【问题标题】:Error:SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]Encryption not supported on the client错误:SQLSTATE[08001]:[Microsoft][ODBC Driver 17 for SQL Server]客户端不支持加密
【发布时间】:2020-01-07 13:58:51
【问题描述】:

在我的网页上发送许多更新请求后,数据库连接崩溃并给我这个错误

有人可以帮忙吗?

禁用 TSL1.0 和 TSL1.1

连接代码

try {
    $dbh = new PDO("sqlsrv:Server=$Serve;Database=$name;ConnectionPooling=0",$user, $password;
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    //echo "Connection Established"
   }

   catch (PDOException $e) {
          print "Error:" . $e->getMessage() . "<br/>";

   }

不适用

【问题讨论】:

  • 一切都更新并“热修复”到最新最好的?使用版本号、ODBC 驱动程序等更新问题。

标签: php sql sql-server http


【解决方案1】:

我遇到了类似的问题,解决方法是重新启动 IIS。

为此,只需转到开始并以管理员身份打开命令提示符。然后输入 iisreset 并回车。几秒钟后,一切可能会重新启动并运行。

希望它对您和其他有类似问题的人有用。

【讨论】:

    【解决方案2】:

    免责声明;这不是“解决方案”,只是相同的行为以及如何绕过它。关于此事的信息很少,我已经尝试了一个月来找出导致此问题的原因。

    我们在 Windows Server 2019(也是 2016)、带有 PHP 7.3 的 IIS 和 Azure SQL 上的行为完全相同。 (驱动 5.3​​ 到 5.7.1 测试,PHP 7.1 到 7.3 测试)

    这似乎是连接问题,Windows 更新附带,代码有效,但有时无法连接。当它第一次崩溃时,在 IIS 重新加载 fastcgi 之前不会建立任何连接。

    这是什么服务器操作系统? (在 Linux 上我们似乎没有这个问题)

    不知道,但似乎与驱动程序和操作系统相关,如果我们在连接字符串中指定 ODBC,它似乎不会崩溃,但它不能使用 ODBC 驱动程序处理所有开箱即用的字符集。不过,您可以通过编程方式解决此问题。

    ODBC utf-8: Unable to retrieve UTF-8 accented characters from Access via PDO_ODBC

    TLS SSL/TLS 1.2 Connection Issues - PHP/SQLSRV

    【讨论】:

    • 感谢您回复我,我使用的是 IIS、PHP 7.3、SQL server 2016,我尝试了您附加的一篇文章,更新了不支持 TLS 1.2 的 ODBC 驱动程序,但问题仍然存在你能告诉我我应该为网络服务器安装哪些驱动程序
    • 您好,这对我们有用(4 天没有连接错误!),Odbc 驱动程序版本 17 (2017.173.01.01),来自 WebPlatform Installer 5.1 的 SQL 驱动程序 5.6,还有 PHP 7.3.7形成 WPI 5.1。所有 x64。没有 beta 驱动程序或测试驱动程序。如果我猜的话,我认为 IIS 服务器和远程 sql 服务器在一段时间后无法协商协议或加密。在 Windows Servr 2016/2019 上,我们通常运行良好,直到负载增加,然后开始出现错误。
    • 感谢 Trond 回复我,我已将连接字符串更改为 $dbh = new PDO("odbc:Driver={ODBC driver 17 for SQL Server};Server=$Serve;Database= $name;ConnectionPooling=0",$user, $password) 我还没有遇到过这个问题,你有什么见解可以帮助我理解发生了什么吗?
    【解决方案3】:

    我们已降级到 Windows Server 2012 R2,现在问题似乎已经消失(我们运行 Azure 和 AWS 实例)。 Azure SQL 似乎与 sql server 2014 最相关。

    对于 Windows 2012 服务器,我确实安装了“Web 平台安装程序”附带的 PHP 7.3.7 软件包以及该 PHP 版本的 SQl Server 驱动程序 5.6。

    认为 SQL 连接不需要或不需要它,但在 php.ini 中添加了 curl 和 ssl cacert 路径(但它是向 AWS S3 推送数据所必需的)。

    我还测试了 IIScrypto 以调整注册表设置以使用 TLS 1.2、所有 TLS、不同的密码、上述链接中的解决方案但没有成功。

    问题开始于 windows 更新或可能是 sql server 更新,并且它是间歇性的,很难找出。明显与通信相关,但不可“按需”重现。

    一旦其余的旧 (.asp/.aspx) 脚本转换为 php,我们就会将解决方案转移到 Linux 平台。

    我最好的选择是使用“web 平台安装程序”中最新的 php 和最新的 sql 驱动程序,如果您需要,也可以更新到最新的 ODBC 驱动程序,但我们现在正在运行版本 17 (2017.173.01.01) 2/14/ 2019 随 Windows server 2012R2 映像一起提供。

    【讨论】:

    • 你觉得下载这个驱动能解决问题吗microsoft.com/en-us/download/details.aspx?id=56730
    • 我可能错了,但您通常使用 ODBC 或 SQLServer 驱动程序和 PHP。我看到有一些对 OLEDB 的引用,但我从未在 PHP 中使用过它。
    • 我们在 Azure 中报告了相同的错误(突然开始发生),使用 SQL Server SaaS、PHP 7.2、SQL PHP 驱动程序 5.7.1、ODBC 2017.173.01.01(从 2 月 14 日起, 2019)。我们将 ODBC 上传到 2017.174.02.01(即 v17.4.2.1),所以我们会看看它是否会停止。虽然,到目前为止,我们只使用了 2 天,甚至第二次它就自行消失了,所以谁知道修复它的方法以及它是否有任何作用
    • IMO 这是 Microsoft 操作系统或 Azure 的问题,我们真的没有太多可做的。我们今天也看到了同样的情况,我们只是尽快迁移到 Linux。我正在考虑最新的驱动程序,但这可能与 Schannel / SSL 有关(虽然不是 Windows 服务器专家)。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多