You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置以兼容旧协议:

  1. 编辑/etc/ssl/openssl.cnf文件,找到[system_default_sect]段,修改为:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:11:15