解决php Composer出现SSL报错问题

1、背景

在使用 PHP 的 Composer 包管理工具进行依赖管理时,可能会出现 SSL 报错导致安装失败的问题。这种问题一度让人困扰,下面我们将详细探讨这个问题的解决方案。

2、报错情况

在使用 Composer 安装依赖时,可能会出现以下类似的报错:

[Composer\Downloader\TransportException]

The "https://packagist.org/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:

error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

Failed to enable crypto

failed to open stream: operation failed

从报错信息可以看出,出现这个错误的原因是因为 SSL 证书未能成功地验证,从而导致了 Composer 无法下载包信息。

3、原因分析

SSL(Secure Sockets Layer)即安全套接层,会对数据进行加密传输,因此可以有效地防止中间人攻击,而本问题则是因为 Composer 在下载包时,无法验证 SSL 证书。这个证书其实是由一家名为 Let’s Encrypt 的组织颁布的,是一个免费的证书,不过它是在 2015 年才成立的,因此在一些早期的 PHP 版本以及操作系统中,可能并不包括 Let’s Encrypt 的证书。

4、解决方案

4.1 方案一:更新 CA 证书

解决这个问题的第一个方案是更新 CA(Certificate Authority)证书。由于 Let’s Encrypt 是一个非常新的证书颁发机构,现有的一些 PHP 版本和操作系统中,并不包含 Let’s Encrypt 的根证书,因此我们需要更新我们的 CA 证书。

对于 CentOS 系统,我们可以使用以下命令更新 CA 证书:

yum -y install ca-certificates

对于 Ubuntu 系统,我们可以使用以下命令更新 CA 证书:

apt-get install -y ca-certificates

对于 Windows 系统,我们需要下载最新版的 cacert.pem 证书,并将其存放在 php 的根目录下。下载地址如下:https://curl.haxx.se/ca/cacert.pem

4.2 方案二:关闭 SSL 验证

如果您觉得更新 CA 证书比较麻烦,或者您的 PHP 版本较老,无法更新到最新的 CA 证书,那么您可以尝试关闭 SSL 验证,让 Composer 在下载包时不验证证书,虽然这种做法会降低安全性,但在一些不重要的场合下,效果也是可以接受的。

在使用 Composer 进行安装时,指定 Composer 使用 --no-check-certificate 参数即可关闭 SSL 验证,如下所示:

composer install --no-check-certificate

4.3 方案三:配置 Composer 镜像源

除了上面两种解决方案之外,我们还可以通过配置 Composer 镜像源来解决这个问题。在中国大陆地区,由于网络问题,访问外网会比较慢,因此我们可以切换 Composer 镜像源为国内镜像,以提高下载速度的同时,也可以避免 SSL 证书验证失败的问题。在配置 Composer 镜像源之前,需要确保您的 Composer 版本大于等于 1.0。

对于 Laravel 用户,可以在 ~/.composer/config.json 文件中加入如下内容:

{

"config": {

"secure-http":false,

"repositories": [

{

"type":"composer",

"url":"https://laravel.packages.tencent.com"

},

{

"packagist":false

}

]

}

}

对于其他用户,可以在 ~/.composer/config.json 文件中加入如下内容:

{

"config": {

"secure-http":false

},

"repositories": [

{

"type":"composer",

"url":"https://mirrors.aliyun.com/composer/"

},

{

"type":"composer",

"url":"https://packagist.phpcomposer.com"

}

]

}

5、总结

本文介绍了三种解决 PHP Composer SSL 报错的方法,分别是更新 CA 证书、关闭 SSL 验证和配置 Composer 镜像源,每种方法都有其适用的场景。希望本文可以帮助读者解决这个棘手的问题。