【问题标题】:Composer update fails while updating from packagist从 packagegist 更新时 Composer 更新失败
【发布时间】:2015-01-28 04:17:55
【问题描述】:

在执行 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 堆栈 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 一切正常。

【问题讨论】:

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


【解决方案1】:

我找到了解决办法

我正在跑步:
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

然后重启Apache

【讨论】:

  • 如果您无法找到您的 cacert.pem 文件副本,可在 curl.haxx.se/docs/caextract.html 下载该文件
  • 我在 MAC 上使用 PHP 版本 5.6.3。但找不到 openssl.cafile=
  • 在 ubuntu 上为 php composer.phar install 我的 zend 框架 2 应用程序工作。
  • 我只是在 php 7.0 中完成了所有这些,但它仍然无法正常工作 (;_;) wtf man?我也重启了 apache
  • 在 vagrant 中的 php 5.6.40 和 ubuntu 18.04 上为我工作
【解决方案2】:

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

【讨论】:

  • 谢谢!有关信息,在 Linux 上的路径是:sudo mv cacert.pem /opt/lampp/share/openssl/cert.pem
  • 要查找位置,可以使用以下命令:php -r "print_r(openssl_get_cert_locations());"(查找 default_cert_file 的值。)。
【解决方案3】:

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

就是这样。现在,当您运行 composer update 时,它​​会正常工作。

【讨论】:

  • 工作就像一个魅力
【解决方案4】:

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

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

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

【讨论】:

  • 从不安全的源 (http) 下载到根证书是一个安全问题。只有业余爱好者才会这样做,然后他们就会被黑客入侵。
  • @Kwadz 使用 https 链接,通过 SSH/SFTP/SCP 将文件放到您的服务器上。
【解决方案5】:

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

我的环境: PHP 5.6.33 视窗 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 错误,则流程应该相同。

【讨论】:

    【解决方案6】:

    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】:
      composer clearcache
      

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

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

      【讨论】:

        【解决方案8】:

        在带有 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

        【讨论】:

          【解决方案9】:

          首先:检查证书文件位置,该位置将在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
          

          ** FROM https://github.com/composer/composer/issues/3346 **

          【讨论】:

            【解决方案10】:

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

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

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

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

            【讨论】:

              【解决方案11】:

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

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

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

                "repositories": [{
                  "type": "composer",
                  "url": "http://packagist.org"
                }],
                "require": {
                  "phpmailer/phpmailer": "^6.0"
                },
                "config": {
                  "secure-http": false
                }
              }
              ```
              

              【讨论】:

              • 你永远不想走不安全的路线。您希望始终修复安全错误,而不是将它们置之不理并忽略它们。错误是有原因的!
              猜你喜欢
              • 2013-07-30
              • 2017-04-30
              • 1970-01-01
              • 2017-10-27
              • 2014-02-11
              • 2016-01-22
              • 1970-01-01
              • 1970-01-01
              • 2014-04-23
              相关资源
              最近更新 更多