Laravel 11连接Azure PostgreSQL时SSL证书验证失败求助
解决Laravel 11连接Azure PostgreSQL的SSL证书验证失败问题
问题根源
你通过pg_connect直接连接时指定了sslrootcert参数指向Azure要求的根证书路径,但Laravel默认的PostgreSQL数据库配置未包含该参数,导致PDO连接时无法完成SSL证书验证,抛出SQLSTATE[08006] [7] SSL error: certificate verify failed错误。
解决方案
1. 在.env文件补充SSL配置
在项目根目录的.env文件中添加以下配置项:
DB_SSLMODE=require DB_SSLROOTCERT=c:\ssl\DigiCertGlobalRootCA.crt.pem
2. 修改数据库配置文件
打开config/database.php,找到pgsql连接的配置数组,新增SSL证书相关参数:
'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'search_path' => 'public', 'sslmode' => env('DB_SSLMODE', 'prefer'), 'sslrootcert' => env('DB_SSLROOTCERT'), // 新增SSL根证书路径配置 'options' => extension_loaded('pdo_pgsql') ? array_filter([ PDO::PGSQL_ATTR_SSL_MODE => env('DB_SSLMODE', 'prefer'), PDO::PGSQL_ATTR_SSL_ROOT_CERT => env('DB_SSLROOTCERT'), // 向PDO传递证书路径 ]) : [], ],
3. 清除配置缓存
修改配置后,运行以下命令清除Laravel配置缓存,确保新配置生效:
php artisan config:clear
验证
完成上述步骤后,重新启动Laravel应用即可正常连接Azure PostgreSQL数据库。
内容的提问来源于stack exchange,提问作者Hanzcerb
相关产品推荐
相关产品推荐

