您的当前位置:首页>全部文章>文章详情

thinkphp5使用ODBC Driver 18 for SQL Server报错EE certificate key too weak

发表于:2026-06-20 22:47:03浏览:1次TAG: #ThinkPHP #sqlserver

thinkphp 用最新版的SQLServer 18报错

SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:EE certificate key too weak]

不同的版本

新环境:Microsoft ODBC 18
旧环境:Microsoft ODBC 17

Microsoft ODBC 18 更新了
官方链接 https://learn.microsoft.com/zh-cn/sql/connect/odbc/windows/features-of-the-microsoft-odbc-driver-for-sql-server-on-windows?view=sql-server-ver16
连接加密默认值已更改。 “加密”的默认值现在为“是”,还引入了新关键字“可选”和“必需”分别作为“否”和“是”的同义词。 为了使用 TDS 8.0 协议进行连接,已添加严格模式 (Encrypt=Strict)。 在此模式下,始终验证服务器证书(忽略 TrustServerCertificate)。 如果新关键字 HostnameInCertificate 与指定的服务器不同,则可用于指定在证书中找到的预期主机名。 HostnameInCertificate 在所有加密模式下都可用,如果服务器端 Force Encryption 选项已启用,则也适用,这会使驱动程序在“可选”或“强制”模式下验证证书,除非使用 TrustServerCertificate 将其禁用。

解决方案

在构造数据库链接的时候 文件路径
/thinkphp/library/think/db/connector/Sqlsrv.php

        protected function parseDsn($config)
        {
            $dsn = 'sqlsrv:Database=' . $config['database'] . ';Server=' . $config['hostname'];
            if (!empty($config['hostport'])) {
                $dsn .= ',' . $config['hostport'];
            }
            //新增
            return $dsn.';TrustServerCertificate=true';
            //return $dsn;
        }

Laravel等其他框架 同理处理