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

Ubuntu 20.04 PHP7.4 Laravel连接SQL Server报错0x2746 加密套件不匹配

错误原因

这是Ubuntu 20.04默认OpenSSL安全策略与Windows服务器上SQL Server支持的TLS 1.2加密套件不匹配导致的连接握手失败:

  • Ubuntu 20.04默认OpenSSL安全等级为2,禁用了所有安全强度低于112位的加密套件
  • 目标Windows服务器的SQL Server仅支持被Ubuntu默认策略禁用的旧款TLS 1.2加密套件,双方无法协商出可用的加密方案,导致连接中断

解决方案(按优先级尝试)

方案1:调整Ubuntu OpenSSL全局安全策略(90%以上场景可解决)

  1. 编辑OpenSSL配置文件:
sudo nano /etc/ssl/openssl.cnf
  1. 找到文件末尾的[system_default_sect]配置段,修改参数:
# 原配置
CipherString = DEFAULT@SECLEVEL=2
# 修改为
CipherString = DEFAULT@SECLEVEL=1
  1. 保存退出后,重启对应的服务使配置生效:
# 若用PHP-FPM + Nginx
sudo systemctl restart php7.4-fpm
sudo systemctl restart nginx

# 若用Apache
sudo systemctl restart apache2
  1. 测试Laravel数据库连接,确认是否恢复正常。

方案2:调整Windows服务器SQL Server的加密套件优先级

如果不想修改Ubuntu的全局安全策略,可在Windows服务器侧配置:

  1. 确认SQL Server版本已安装TLS 1.2支持补丁(SQL Server 2012及更早版本需要单独安装对应补丁,2016及以后版本默认支持)
  2. 使用系统加密配置工具调整TLS 1.2加密套件优先级,将以下Ubuntu兼容的套件移到优先级前列:
    • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    • TLS_RSA_WITH_AES_256_GCM_SHA384
    • TLS_RSA_WITH_AES_128_GCM_SHA256
  3. 重启Windows服务器生效后再测试连接。

临时验证方案(仅测试用,不建议生产环境使用)

如果仅需快速确认是否为加密套件导致的问题,可先在Laravel的数据库配置中临时关闭加密验证:
打开config/database.php,找到sqlsrv连接配置段,新增options参数:

'sqlsrv' => [
    // 其他原有配置保持不变
    'options' => [
        PDO::SQLSRV_ATTR_ENCRYPT => PDO::SQLSRV_ENCRYPT_OFF,
    ],
],

保存后测试连接,若能正常访问则可确认是加密协商问题,再按方案1或2正式修复。


验证方法

配置完成后可先在Ubuntu命令行用sqlcmd工具验证连接:

sqlcmd -S <SQL服务器地址>,<端口> -U <用户名> -P <密码>

若能正常进入SQL交互命令行,说明连接配置已生效。

内容的提问来源于stack exchange,提问作者naif basalib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:24:01