SSL证书需存放在哪个路径可让PHP cURL默认自动加载使用
cURL及上层HTTP依赖库全局自签名证书配置方法
不要瞎猜不同环境下cURL的默认证书路径,直接在当前环境执行以下命令,就能拿到当前安装版本cURL实际使用的默认证书配置:
curl -v https://example.com 2>&1 | grep -E "CAfile|CApath"
输出结果里CAfile对应cURL默认读取的单文件CA证书包路径,CApath对应cURL扫描证书的目录路径,这个结果是当前环境的真实配置,不受网上通用文档的版本、发行版差异影响。
要实现cURL、Guzzle、Httpful等所有依赖系统CA信任链的HTTP库无需额外代码配置自动识别自签名证书,不需要重编译cURL,也不要手动往/etc/ssl/certs目录直接丢证书文件(该目录是系统生成的哈希软链接目录,直接放入原始证书文件无法被识别),按发行版对应操作即可:
- Debian/Ubuntu系发行版:
将自签名根CA证书(后缀为.crt,PEM格式)放入/usr/local/share/ca-certificates/目录,执行命令sudo update-ca-certificates,系统会自动将证书更新到全局信任链,同步生成cURL可识别的哈希索引,所有依赖系统CA库的程序都会自动信任该证书。 - RHEL/CentOS/Fedora/Rocky系发行版:
将自签名根CA证书放入/etc/pki/ca-trust/source/anchors/目录,执行命令sudo update-ca-trust extract,即可完成全局证书信任更新。
所有通过发行版官方软件源安装的cURL,编译时的CA路径默认和系统全局CA信任链路径对齐,只要通过系统自带的CA更新工具导入证书,上层基于cURL扩展实现的HTTP库都会直接继承系统信任配置,不需要在业务代码里加任何证书指定逻辑,完全开箱即用。
注意事项
- 必须导入自签名对应的根CA证书,不能直接导入单域名的终端实体证书,否则会因为信任链不完整依旧报证书校验失败。
- 如果是手动编译安装的cURL,编译时添加参数
--with-ca-path=/etc/ssl/certs --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt即可对齐系统默认CA路径,后续行为和源安装版本完全一致。
内容的提问来源于stack exchange,提问作者HubertNNN
相关产品推荐
相关产品推荐

