thinkphp5使用ODBC Driver 18 for SQL Server报错EE certificate key too weak
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等其他框架 同理处理
