composer 访问自签名证书源报 ssl 错误的直接原因是 curl+openssl 默认校验证书链而企业根证书未被信任;临时方案可用 composer_cafile=/dev/null 或 --disable-tls(仅限可信环境),生产环境应将 pem 格式根证书追加至 curl.cainfo 指定文件,并确保 idn 域名转 punycode、证书链完整。

Composer 访问自签名证书源时提示 SSL certificate problem
直接原因是 Composer 默认校验证书链,而企业自签名证书不在系统或 PHP 的信任根证书库中。常见报错是 SSL certificate problem: unable to get local issuer certificate 或 CURLOPT_SSL_VERIFYPEER failed。这不是 Composer 配置问题,而是底层 cURL + OpenSSL 的证书验证行为。
临时绕过验证(仅限开发/测试环境)
不推荐长期使用,但能快速验证是否为证书问题本身。关键不是改 composer.json,而是通过环境变量或命令行参数控制 cURL 行为:
- 运行命令前加
export COMPOSER_CAFILE=/dev/null(Linux/macOS),或 Windows 下用set COMPOSER_CAFILE= - 或每次执行时加
-n(即--no-interaction)+--disable-tls—— 注意:--disable-tls会彻底禁用 HTTPS,仅当源支持 HTTP 且网络可信时才可用 - 更稳妥的临时方式:在命令前设置
curl.cainfo为无效路径,例如php -d curl.cainfo=/dev/null /usr/bin/composer install
正确配置信任自签名证书(生产级做法)
核心是让 PHP/cURL 识别你的企业 CA 根证书。分三步走:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 确认证书格式:确保你拿到的是 PEM 格式的根证书(以
-----BEGIN CERTIFICATE-----开头,.crt或.pem后缀)。若只有 PFX/P12,用openssl pkcs12 -clcerts -nokeys -in cert.pfx -out ca.crt提取 - 找到 PHP 使用的
curl.cainfo路径:运行php -i | grep 'curl.cainfo',典型路径如/etc/php/8.1/cli/conf.d/99-composer.ini或/usr/lib/php/ssl/cacert.pem - 将企业根证书内容追加到该文件末尾(不要覆盖!),然后重启 PHP CLI 进程(如
sudo systemctl restart php8.1-fpm不影响 CLI,CLI 通常无需重启,但需确保下次调用时读取新内容)
中文域名源服务器的额外注意点
如果源地址是类似 https://pkg.公司名.内部/ 这类含中文或 IDN 域名的 URL,Composer 本身不解析 IDN,必须提前转成 Punycode:
- 用在线工具或命令行转换:例如
idn --quiet --unicode "公司名.内部"(Linux)或 Python 中import codecs; codecs.encode('公司名.内部', 'idna') - 得到结果如
xn--55qx5d.内部,然后在composer.json的repositories里写成https://pkg.xn--55qx5d.内部/ - 即使证书是为原始中文域名签发的,OpenSSL 验证时也只认 Punycode 形式;否则会出现
certificate is not valid for the given hostname
最易被忽略的是:证书链完整性。企业自签名证书常只提供服务端证书,没附带中间 CA(如果有)。用 openssl s_client -connect pkg.公司名.内部:443 -showcerts 看实际返回的证书链,缺哪一级就补哪一级到 curl.cainfo 文件里。










