Ubuntu 22.04下Laravel用ODBC Driver 18连SQL Server遇SSL错误求助
解决ODBC Driver 18连接SQL Server 2014的SSL Provider错误
错误原因分析
你遇到的错误是因为ODBC Driver 18 for SQL Server默认强制使用TLS 1.2及以上版本的加密协议,但SQL Server 2014(未打最新补丁时)仅支持TLS 1.0/1.1,且Ubuntu 22.04默认的OpenSSL配置禁用了这些旧协议;同时Laravel封装的加密参数可能未完全生效。
具体解决方案
方案1:调整Laravel数据库配置,直接指定ODBC原生参数
Laravel的sqlsrv驱动支持直接传入ODBC原生连接选项,绕过封装层可能的参数解析问题:
'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('ATTN_DB_HOST', 'localhost'), 'port' => env('ATTN_DB_PORT', '1433'), 'database' => env('ATTN_DB_DATABASE', 'forge'), 'username' => env('ATTN_DB_USERNAME', 'forge'), 'password' => env('ATTN_DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'options' => [ PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8, // 明确禁用加密并信任服务器证书 'Encrypt' => 'no', 'TrustServerCertificate' => 'yes' ] ]
方案2:修改OpenSSL配置,允许旧版TLS协议
如果SQL Server 2014无法升级补丁启用TLS 1.2,需要调整Ubuntu的OpenSSL配置以兼容旧协议:
- 编辑
/etc/ssl/openssl.cnf文件,找到[system_default_sect]段,修改为:
[system_default_sect] MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=1
- 保存后重启PHP-FPM或Web服务(如Apache/Nginx)使配置生效。
方案3:降级到ODBC Driver 17 for SQL Server
Driver 17对旧版SQL Server的兼容性更好,默认加密策略更宽松:
# 卸载Driver 18 sudo apt remove msodbcsql18 # 安装Driver 17 sudo apt update sudo apt install msodbcsql17 unixodbc-dev
验证连接
修改配置后,用isql直接测试ODBC连接:
isql -v "DRIVER={ODBC Driver 18 for SQL Server};SERVER=你的主机地址,1433;DATABASE=你的数据库名;UID=用户名;PWD=密码;Encrypt=no;TrustServerCertificate=yes"
内容的提问来源于stack exchange,提问作者Muntashir Are Rahi
相关产品推荐
相关产品推荐

