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

如何解决Amazon Linux2023上Laravel11连接Windows2008R2 MSSQL的SSL问题?

解决Amazon Linux 2023下PHP 8.2+Laravel 11连接遗留MSSQL的SSL协议不兼容问题(ODBC方案)

问题背景

无法迁移或更新遗留MSSQL数据库,仅需读取数据。在Amazon Linux 2023 + PHP 8.2 + Laravel 11环境下,配置sqlsrv驱动连接时出现以下SSL协议不支持错误:

Illuminate\Database\QueryException
SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol]

原config/database.php中的连接配置:

'legacy_database' => [
    'driver' => 'sqlsrv',
    'host' => env('LEGACY_DB_HOST'),
    'port' => env('LEGACY_DB_PORT', '1433'),
    'database' => env('LEGACY_DB_DATABASE'),
    'username' => env('LEGACY_DB_USERNAME'),
    'password' => env('LEGACY_DB_PASSWORD'),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'options' => [
        PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8,
        'TrustServerCertificate' => true,
        'Encrypt' => false,
        'LoginTimeout' => 30,
        'TraceOn' => 1,
        'ReturnDatesAsStrings' => true,
    ],
],

可行方案:使用ODBC连接

可以通过ODBC实现连接,以下是具体操作步骤:

1. 安装必要组件

在Amazon Linux 2023终端执行以下命令,安装ODBC相关依赖:

# 安装EPEL源(未安装时执行)
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

# 添加Microsoft软件源并安装ODBC Driver 18(适配旧SSL协议)
sudo dnf config-manager --add-repo https://packages.microsoft.com/config/rhel/9/prod.repo
sudo dnf install -y msodbcsql18 mssql-tools18

# 安装PHP ODBC扩展
sudo dnf install -y php-odbc

2. 配置Laravel的ODBC连接

修改config/database.php,将原legacy_database配置替换为ODBC格式:

'legacy_database' => [
    'driver' => 'odbc',
    'dsn' => env('LEGACY_DB_ODBC_DSN'),
    'username' => env('LEGACY_DB_USERNAME'),
    'password' => env('LEGACY_DB_PASSWORD'),
    'charset' => 'utf8',
    'prefix' => '',
    'options' => [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        'TrustServerCertificate' => 'yes',
        'Encrypt' => 'no',
        'LoginTimeout' => 30,
    ],
],

在.env文件中配置ODBC的DSN,有两种方式可选:

方式1:直接定义DSN字符串

LEGACY_DB_ODBC_DSN=Driver={ODBC Driver 18 for SQL Server};Server=tcp:你的数据库主机,1433;Database=你的数据库名;Encrypt=no;TrustServerCertificate=yes;

方式2:使用系统DSN(可选)

编辑/etc/odbc.ini添加系统级DSN:

[LegacyMSSQL]
Driver=ODBC Driver 18 for SQL Server
Server=你的数据库主机,1433
Database=你的数据库名
Encrypt=no
TrustServerCertificate=yes

然后在.env中引用该DSN:

LEGACY_DB_ODBC_DSN=LegacyMSSQL

3. 解决SSL协议不兼容的额外调整

如果仍出现SSL错误,说明遗留MSSQL使用了过时的SSL协议(如TLS 1.0/1.1),需调整系统SSL策略:

# 临时允许旧SSL协议(重启后失效)
sudo update-crypto-policies --set DEFAULT:SHA1

# 永久允许(执行后需重启系统生效)
sudo update-crypto-policies --set DEFAULT:SHA1
sudo reboot

4. 测试连接

创建测试路由验证连接是否成功:

Route::get('/test-legacy-db', function () {
    try {
        DB::connection('legacy_database')->select('SELECT TOP 1 * FROM 你的测试表名');
        return '遗留数据库连接成功';
    } catch (\Exception $e) {
        return '连接失败:' . $e->getMessage();
    }
});

内容的提问来源于stack exchange,提问作者Rustam Anvarov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:14:52