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

如何让PHP8.1-fpm的sqlsrv扩展接受自签名证书?

如何让PHP8.1-fpm的sqlsrv扩展接受自签名证书?

我来帮你一步步搞定这个问题,分两个核心部分:先确认Moodle实际在用哪个扩展,再配置信任自签名证书的规则。

第一步:确定Moodle使用的具体扩展

你装了sqlsrv和pdo_sqlsrv两个扩展,得先搞清楚Moodle到底依赖哪个:

  • 最直接的方法是登录Moodle后台,进入「站点管理」→「服务器」→「PHP信息」,在页面里搜索pdo_sqlsrv或sqlsrv,能搜到完整扩展信息的那个,就是当前在使用的;
  • 也可以直接查看Moodle的config.php配置文件,看$CFG->dbtype字段:如果值是sqlsrv或mssqlnative,用的是sqlsrv扩展;如果是pdo_sqlsrv,那就是PDO版本的扩展。

第二步:配置信任自签名证书

不管用哪个扩展,都能通过连接参数或全局配置来强制信任自签名证书,下面分情况说明:

情况1:使用sqlsrv扩展(非PDO版本)

  • 连接代码级配置(推荐,仅影响Moodle的数据库连接):
    确保Moodle的数据库连接参数里添加TrustServerCertificate => true,示例逻辑如下:
    $connectionParams = [
        "UID" => "你的数据库用户名",
        "PWD" => "你的数据库密码",
        "Database" => "Moodle数据库名称",
        "TrustServerCertificate" => true
    ];
    $conn = sqlsrv_connect("你的SQL服务器地址", $connectionParams);
    
  • 全局php.ini配置(不推荐,会影响所有使用sqlsrv的应用):
    编辑php.ini文件,添加或修改以下配置项:
    sqlsrv.TrustServerCertificate = On
    

情况2:使用pdo_sqlsrv扩展

  • 连接DSN配置(推荐):
    在PDO连接的DSN字符串中加入TrustServerCertificate=Yes参数,示例:
    $dsn = "sqlsrv:Server=你的SQL服务器地址;Database=Moodle数据库名称;TrustServerCertificate=Yes";
    $conn = new PDO($dsn, "数据库用户名", "数据库密码");
    
  • 全局php.ini配置:
    编辑php.ini文件,添加或修改以下配置项:
    pdo_sqlsrv.TrustServerCertificate = On
    

额外方案:系统级信任证书

如果不想在PHP层面单独配置,也可以把自签名证书导入到服务器的系统信任根证书库:

  • Linux系统:将证书文件复制到/etc/ssl/certs目录,然后执行update-ca-certificates命令更新信任列表;
  • Windows系统:通过「证书管理器」将证书导入到「受信任的根证书颁发机构」存储区。
    这种方式是系统全局生效,适合多个应用都需要信任该证书的场景。

最后别忘了,不管修改了哪种配置,都要重启php8.1-fpm服务让配置生效,比如Linux下执行:

systemctl restart php8.1-fpm

备注:内容来源于stack exchange,提问作者Gbl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:23:00