如何让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
相关产品推荐
相关产品推荐

