FAIL [Composer\Downloader\TransportException] curl error 60 while downloading https://api.github.com/rate_limit: SSL certificate problem: unable to get local issuer certificate
时间: 2025-06-08 21:23:00 浏览: 9
### Composer SSL Certificate Problem 解决方案
当遇到 `Composer` 的 `TransportException curl error 60` 报错时,通常是因为本地环境中缺少有效的 CA 证书文件或配置不正确。以下是详细的解决方案:
#### 方法一:更新 Composer 自带的 CA Bundle 文件
Composer 提供了一个内置的 CA Bundle 文件用于处理 HTTPS 请求。如果该文件过期或损坏,则可能导致此问题。
运行以下命令来重新下载并替换默认的 CA Bundle 文件:
```bash
composer self-update --snapshot
```
这一步会强制更新 Composer 并修复可能存在的 CA 配置问题[^1]。
---
#### 方法二:手动设置 cacert.pem 路径
可以手动指定一个可信的 CA 证书路径给 PHP 使用。具体步骤如下:
1. 下载最新的 cacert.pem 文件到本地目录:
```bash
wget https://curl.se/ca/cacert.pem -O /usr/local/share/ca-certificates/cacert.pem
```
2. 修改 php.ini 中的 openssl.cafile 参数指向刚才保存的 cacert.pem 文件:
```ini
openssl.cafile=/usr/local/share/ca-certificates/cacert.pem
```
3. 如果使用的是 Windows 系统,在 composer.json 添加自定义环境变量:
```json
{
"config": {
"cafile": "C:/path/to/cacert.pem"
}
}
```
完成以上更改后重启 Web Server 或 CLI 工具以应用新的配置[^2]。
---
#### 方法三:禁用 SSL 验证(仅限开发测试)
对于某些特殊场景下无法快速获取有效证书的情况,可以选择临时关闭 SSL 验证功能。注意这种方法存在安全隐患,请勿应用于生产环境!
编辑全局或者项目级别的 composer.json 文件加入以下字段:
```json
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/example/repo.git",
"options": {
"ssl": {
"verify_peer": false,
"verify_host": false
}
}
}
]
}
```
另外也可以通过命令行参数实现相同效果:
```bash
COMPOSER_ALLOW_SUPERUSER=1 COMPOSER_DISABLE_XDEBUG_WARN=1 \
php -dopenssl.cafile="" $(which composer) install --ignore-platform-reqs
```
尽管如此,强烈建议优先考虑其他更安全的方式解决问题[^3]。
---
#### 方法四:验证服务器上的现有证书状态
有时可能是目标主机本身存在问题而非客户端原因造成的连接失败。可以通过 OpenSSL 命令检查远程站点返回的具体信息:
```bash
echo | openssl s_client -connect repo.packagist.org:443 -servername repo.packagist.org
```
观察输出结果是否有异常提示;如果有则联系服务提供商确认其是否已正确部署最新版 TLS 协议支持以及相应链路完整性状况。
---
### 总结
针对 `Composer TransportException curl error 60` 这类错误,推荐按照上述顺序逐一排查直至找到根本原因所在。首选方式应始终围绕完善当前系统的信任库管理展开工作而不是轻易放弃必要的安全性防护措施。
```python
import subprocess
def fix_composer_ssl():
try:
result = subprocess.run(['composer', 'self-update', '--snapshot'], check=True, capture_output=True, text=True)
print(result.stdout.strip())
# Additional steps here...
except Exception as e:
raise RuntimeError('Failed to resolve Composer SSL issue') from e
if __name__ == '__main__':
fix_composer_ssl()
```
阅读全文
相关推荐


















