SQLSTATE 08001 [Microsoft][SQL Server 的 ODBC 驱动程序 18]SSL 提供程序:证书链是由不受信任的机构颁发的

分享于2023年03月01日 odbc php sql-server ssl-certificate windows-server 问答
【问题标题】:SQLSTATE 08001 [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: The certificate chain was issued by an authority that is not trustedSQLSTATE 08001 [Microsoft][SQL Server 的 ODBC 驱动程序 18]SSL 提供程序:证书链是由不受信任的机构颁发的
【发布时间】:2023-02-24 18:14:07
【问题描述】:

我最近从 IIS Express 切换到 Windows Server 上的 IIS。在进行迁移时,我在识别 PHP、ODBC 安装等方面遇到了问题。但是,即使我已经拥有 SSL 证书,我仍收到以下错误。

Array
(
     [0] => Array
         (
             [0] => 08001
             [SQLSTATE] => 08001
             [1] => -2146893019
             [code] => -2146893019
             [2] => [Microsoft][ODBC Driver 18 for SQL Server]SSL
Provider: The certificate chain was issued by an authority that is not
trusted.

             [message] => [Microsoft][ODBC Driver 18 for SQL Server]SSL
Provider: The certificate chain was issued by an authority that is not
trusted.

         )

     [1] => Array
         (
             [0] => 08001
             [SQLSTATE] => 08001
             [1] => -2146893019
             [code] => -2146893019
             [2] => [Microsoft][ODBC Driver 18 for SQL Server]Client
unable to establish connection
             [message] => [Microsoft][ODBC Driver 18 for SQL
Server]Client unable to establish connection
         )

)

我想相信问题出在连接设置上。数据库版本为 Microsoft SQL Server 2019。

"Database", "UID"=>"UID","PWD"=>"PWD");
   $connection = sqlsrv_connect( $serverName, $connectionInfo);

   if( !$connection ) {
     die(print_r( sqlsrv_errors(), true));
   }

?>

  • 这与 IIS 中的 SSL/TLS 证书无关,它抱怨 SQL Server 实例上的自签名证书。你读过 ODBC Driver 18.0 for SQL Server Released 了吗? 重大变化 - 默认加密为是/强制 ... 这意味着您需要在连接字符串中使用 Encrypt=No; 关闭连接加密,或者在连接字符串中使用 TrustServerCertificate=Yes; 信任自签名证书。

【解决方案1】:

将参数添加到连接信息有效

Encrypt=true;TrustServerCertificate=true;

有人建议 TrustServerCertificate=是; 那不会工作也不会出错

【讨论】: