Composer中文镜像本身不与插件自签名证书冲突,真正原因是手动在composer.json的repositories中添加了含自签名证书的私有源(如https://pkg.公司名.内部/),导致Composer解析依赖时访问该地址触发cURL证书校验失败。

Composer 中文镜像本身不会和插件的自签名证书冲突——真正打架的是你配置镜像时顺手加的 repositories 条目,和插件加载时触发的 cURL 证书校验行为碰在了一起。
为什么换阿里云镜像后插件安装突然报 SSL 错误
不是镜像有问题,而是你手动在 composer.json 的 repositories 里加了企业私有源(比如 https://pkg.公司名.内部/),而这个地址用了自签名证书;Composer 在解析依赖时会同时访问官方源(走镜像)和你的私有源(走原地址),后者触发证书校验失败。常见报错是:SSL certificate problem: unable to get local issuer certificate 或 CURLOPT_SSL_VERIFYPEER failed。
- 镜像只代理
packagist.org流量,不接管你repositories里写的任何私有地址 - 插件本身不参与证书校验,但插件若声明了
type: "composer"并指向私有源,就会触发 cURL 访问该地址 - 错误往往出现在
composer install阶段,而非插件执行阶段——说明问题出在元数据拉取环节
中文域名私有源必须转 Punycode 才能配合插件使用
如果私有源地址含中文(如 https://pkg.公司名.内部/),Composer 不会自动做 IDN 转码,插件加载时直接用原始域名发起 HTTPS 请求,OpenSSL 拿不到匹配的证书 SAN 字段,必然失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用命令行转:Linux 下运行
idn --quiet --unicode "公司名.内部",得到类似xn--55qx5d.内部 - 把
composer.json里repositories的 URL 改成https://pkg.xn--55qx5d.内部/ - 别只改
config里的repo-packagist,那是给镜像用的;私有源地址必须单独处理 - 转完后仍报错?检查证书里
Subject Alternative Name是否包含这个 Punycode 域名
插件依赖私有源时,证书信任必须全局生效
插件自己不管理证书信任链,它复用 PHP/cURL 的全局配置。你给 Composer 单独设 COMPOSER_CAFILE,对插件加载私有源无效——因为插件调用 cURL 是独立进程或上下文。
- 找到 PHP 实际使用的
curl.cainfo路径:php -i | grep curl.cainfo - 把企业根证书(PEM 格式)内容追加到该文件末尾,不要覆盖原有内容
- 确认插件包的
composer.json中require的是真实可用的私有包名,而不是靠插件“猜”出来的别名 - 如果插件通过
autoload动态注册仓库(比如某些 SDK 插件),需确保其生成的 URL 也已完成 Punycode 转换
最易被忽略的一点:插件可能在 post-autoload-dump 阶段才去拉私有源元数据,此时 --no-scripts 能绕过,但不代表证书问题不存在——它只是推迟了报错时机。

















