从packagist更新时,Composer更新失败

时间:2014-11-29 20:24:10

标签: php openssl xampp composer-php php-5.6

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

  

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

我正在使用:

  1. PHP 5.6.3(cli)(建于2014年11月17日15:16:53)
  2. XAMPP stack 5.6.3-0
  3. ubuntu 14.04
  4. 作曲家diag表示:

    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: 
    

    [作曲\下载\ 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,一切都很好。

12 个答案:

答案 0 :(得分:27)

我找到了解决方案

我正在跑步:
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 /本地/ LIB /的perl5 / SITE_PERL / 5.16 / Mozilla浏览器/ CA / cacert.pem

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

然后重启Apache

答案 1 :(得分:11)

我通过将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!

答案 2 :(得分:9)

我正在使用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

多数民众赞成。现在,当您运行编辑器更新时,它将正常工作。

答案 3 :(得分:4)

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

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

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

答案 4 :(得分: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

答案 5 :(得分:1)

即使添加了下载的有效最新证书,我在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)单击证书有效

enter image description here

4)打开“证书路径”标签,您将看到以下路径级别

enter image description here

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

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

enter image description here

7)选择BASE 64编码

enter image description here

8)单击“下一步”,然后将该文件保存到一个位置,对setp 4中显示的编号(2)执行此操作。

enter image description here

9)打开.cer文件,然后将内容复制到用于在php.ini中配置的.crt文件的末尾

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

如果通过代理访问网站时看到作曲家抛出ssl错误,则过程应该相同。

答案 6 :(得分:1)

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

答案 7 :(得分: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 **

答案 8 :(得分:0)

locate cacert.pem

vi /usr/local/lib/php.ini

#add this

openssl.cafile=/usr/local/share/perl5/Mozilla/CA/cacert.pem

# press esc then type
:wq #enter

curl -sS https://getcomposer.org/installer | php -- —version=1.0.0-alpha10

mv composer.phar /usr/local/bin/composer

alias composer='/usr/local/bin/composer'

composer -V

php /usr/local/bin/composer global self-update

cd .composer/
composer init

答案 9 :(得分:0)

对我们来说,这个问题似乎只影响我们的一个私人存储库。它可能与证书或公司防火墙有关,但它似乎是间歇性的,所以我们在找到不同的修复程序之前无法确认。

在composer.json中,我们将存储库URL从https更改为ssh变体并添加了"no-api": true选项:

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

通过该编辑,作曲家更新/安装操作能够成功完成。

答案 10 :(得分:0)

composer clearcache

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

  

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

答案 11 :(得分: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
  }
}
```