33

在执行 composer install/update 时,我从 openssl 收到以下错误:

无法下载“ https://packagist.org/packages.json ”文件:SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 无法启用加密无法打开流:操作失败 https://packagist.org无法完全加载,包信息是从本地缓存加载的,可能已过期

我在用:

  1. PHP 5.6.3 (cli)(构建时间:2014 年 11 月 17 日 15:16:53)
  2. XAMPP 堆栈 5.6.3-0
  3. Ubuntu 14.04

作曲家诊断显示:

Checking composer.json: OK
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity: FAIL
[Composer\Downloader\TransportException] The "https://packagist.org/packages.json"  file  could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Failed to enable crypto
failed to open stream: operation failed
Checking disk free space: OK
Checking composer version: 

[Composer\Downloader\TransportException]无法下载
https://getcomposer.org/version
”文件:SSL 操作失败,代码为 1。OpenSSL 错误消息: 错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证
失败启用加密
未能打开流:操作失败

php -r 'var_dump(openssl_get_cert_locations());' 显示:

array(8) {
["default_cert_file"]=>
string(33) "/opt/lampp/share/openssl/cert.pem"
["default_cert_file_env"]=>
string(13) "SSL_CERT_FILE"
["default_cert_dir"]=>
string(30) "/opt/lampp/share/openssl/certs"
["default_cert_dir_env"]=>
string(12) "SSL_CERT_DIR"
["default_private_dir"]=>
string(32) "/opt/lampp/share/openssl/private"
["default_default_cert_area"]=>
string(24) "/opt/lampp/share/openssl"
["ini_cafile"]=>
string(0) ""
["ini_capath"]=>
string(0) ""
}

对于 php 5.5.19,一切正常。

4

11 回答 11

30

我找到了解决方案

我正在运行:
FreeBSD 10.1
Apache2.4
PHP 5.6.3

为了找到 CA 文件,我运行了这个命令

> locate cacert.pem

结果是:
/usr/local/lib/perl5/site_perl/5.16/Mozilla/CA/cacert.pem

然后打开 php.ini 文件并
更改:

;openssl.cafile=

对此:

openssl.cafile=/usr/local/lib/perl5/site_perl/5.16/Mozilla/CA/cacert.pem

注意:该指令仅适用于 php 5.6.x

然后重启阿帕奇

于 2014-12-02T16:28:08.797 回答
12

我通过将 SSL 证书添加到 XAMPP 证书文件夹解决了 SSL 错误的问题。

// navigate to a directory to save the certificate
cd /Downloads

// download a certificate
wget http://curl.haxx.se/ca/cacert.pem

// rename and move the file to the Xampp certificates folder
mv cacert.pem /Applications/XAMPP/xamppfiles/share/openssl/cert.pem

不要忘记重新启动您的apache!

于 2015-04-02T04:45:15.223 回答
10

我正在使用 Mac OS Sierra,当我尝试使用命令更新作曲家时,/usr/local/bin/composer self-update我不断收到错误消息:

[Composer\Downloader\TransportException]                                                          
  The "https://getcomposer.org/version" file could not be downloaded: SSL operation failed with co  
  de 1. OpenSSL Error messages:                                                                     
  error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed                 
  Failed to enable crypto                                                                           
  failed to open stream: operation failed  

我按照以下步骤修复了它:

1)使用命令创建本地数据库:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

2)找到证书文件:

locate cacert.pem 

3) 检查 php.ini 文件的位置:

php --ini

4) 如果文件的“加载的配置文件”php.ini显示为(none),请将文件复制/etc/php.ini.default/etc/php.ini

sudo cp /etc/php.ini.default /etc/php.ini

5)打开文件并通过取消注释并将链接附加到证书文件位置来php.ini编辑该 行:;openssl.cafile=

openssl.cafile=/Users/me/.composer/cacert.pem

而已。现在,当您运行作曲家更新时,它会正常工作。

于 2016-10-07T21:03:34.973 回答
6

将 openssl.cafile 添加到 php.ini 也对我有用。我没有寻找证书文件,而是直接下载了它:

卷曲http://curl.haxx.se/ca/cacert.pem > cacert.pem

然后只是将 openssl.cafile 设置指向它。

于 2015-03-10T05:22:10.637 回答
5

即使添加了下载的有效最新证书,我在 Windows 上也遇到了同样的问题。我在代理后面运行作曲家,所以我必须添加环境变量 http_proxy 和 https_proxy。

我的环境:PHP 5.6.33 Windows 7 64 位 Composer 版本 1.6.3 2018-01-31 16:28:17

我下载了最新的证书CA Bundle并在我的 php.ini 中更新了以下路径仍然无法正常工作。

curl.cainfo = C:\Certificates\ca-bundle.crt
openssl.cafile= C:\Certificates\ca-bundle.crt
openssl.capath=C:\Certificates

然后做了以下步骤

1) 打开 chrome 浏览器并导航https://packagist.org/

2) 点击小安全锁图标

3) 点击证书有效

在此处输入图像描述

4)打开证书路径选项卡,您将看到以下路径级别

在此处输入图像描述

5)需要导出图中标记的1和2的证书

6) 要导出证书,请单击查看证书,转到详细信息选项卡,然后单击复制到文件

在此处输入图像描述

7)选择BASE 64编码

在此处输入图像描述

8) 单击下一步并将该文件保存到一个位置,对第 4 步中显示的第 (2) 号执行此操作

在此处输入图像描述

9) 打开 .cer 文件并将内容复制到您在 php.ini 中配置的 .crt 文件的末尾

然后尝试运行 comport install - 它对我有用

如果您在通过代理访问站点时看到 composer 抛出 ssl 错误,则过程应该相同。

于 2018-12-18T16:24:25.387 回答
3

1.

php -r "print_r(openssl_get_cert_locations());"
array(8) {
  ["default_cert_file"]=>
  string(31) "/usr/local/etc/openssl/cert.pem"
  ...
}

2.vim php.ini

[openssl]
openssl.cafile=/usr/local/etc/openssl/cert.pem
于 2019-04-15T09:22:23.980 回答
2
composer clearcache

当我收到错误时,这对我有用:

https://packagist.org无法完全加载,包信息是从本地缓存加载的,可能已过期

于 2018-03-08T19:12:25.750 回答
1

在带有 XAMPP 的 Mac 上:

cd /Applications/XAMPP/xamppfiles/share/openssl

sudo curl -O -k http://curl.haxx.se/ca/cacert.pem

sudo mv cacert.pem cert.pem

停止并重新启动 Apache

于 2015-06-20T08:35:57.220 回答
0

首先:检查证书文件的位置,这将是default_cert_file密钥,你会在openssl_get_cert_locations()它的一个 php openssl 函数中找到它。您可以按如下方式运行它:

$ php -r "print_r(openssl_get_cert_locations());"

在我的系统中输出

    Array
    (
        [default_cert_file] => /opt/lampp/share/openssl/cert.pem
        [default_cert_file_env] => SSL_CERT_FILE
        [default_cert_dir] => /opt/lampp/share/openssl/certs
        [default_cert_dir_env] => SSL_CERT_DIR
        [default_private_dir] => /opt/lampp/share/openssl/private
        [default_default_cert_area] => /opt/lampp/share/openssl
        [ini_cafile] => 
        [ini_capath] => 
    )

:下载http://curl.haxx.se/ca/cacert.pem

$ wget http://curl.haxx.se/ca/cacert.pem

第三:将certificate.pem文件复制到default_cert_file位置:

$ sudo mv cacert.pem /opt/lampp/share/openssl/cert.pem

** 来自https://github.com/composer/composer/issues/3346 **

于 2015-07-21T10:07:14.213 回答
0

只需将此配置添加到您的 composer.json 文件中。

"config": {
"secure-http": false
}

这是一个工作的 composer.json 文件的完整示例

  "repositories": [{
    "type": "composer",
    "url": "http://packagist.org"
  }],
  "require": {
    "phpmailer/phpmailer": "^6.0"
  },
  "config": {
    "secure-http": false
  }
}
```
于 2019-09-03T09:09:00.517 回答
0

For us, this issue only seemed to affect one of our private repositories. It may have had something to do with certs or a corporate firewall, but it seemed intermittent so we weren't able to confirm before we found a different fix.

Inside composer.json, we changed the repository URL from the https to the ssh variant and added the "no-api": trueoption:

"repositories": [
    {
      "type": "vcs",
      "url": "git@github.com:our-user/our-repo.git",
      "no-api": true
    }
]

With that edit, composer update/install operations were able to complete successfully.

于 2017-10-26T17:50:20.563 回答