2017-02-17 7 views
1

Я пытаюсь запустить composer update на windows 10 за прокси-сервером, это дает мне ошибку. enter image description hereустановка композитора из-за прокси-сервера

и я установить HTTP прокси-сервер с помощью следующей команды

SET HTTP_PROXY="http://192.168.1.6:808" 
SET HTTPS_PROXY="http://192.168.1.6:808" 

это также возвращает ту же ошибку.

+2

Скопируйте или вставьте здесь ошибку, а не отправьте снимок экрана. – bfontaine

ответ

2

Вот ключевые моменты, чтобы сделать Composer работу за прокси-сервер (работает на Windows, не примерить на Linux):

1) URL кодировать пароль (для специальных символов)

Вы можете сделать это легко с помощью командной строки PHP, например:

Вход:

php -r "echo urlencode('P*a/$$/w!0%r$d');" 

Выход:

P%2Aa%2F%24%24%2Fw%210%25r%24d 

Используйте сформированное значение, чтобы установить http_proxy и https_proxy переменные ENV.

2) Удалите кавычки вокруг HTTP_PROXY и https_proxy Env переменные

От:

SET HTTP_PROXY="http://username:[email protected]:port" 
SET HTTPS_PROXY="http://username:[email protected]:port" 

Для:

SET HTTP_PROXY=http://username:[email protected]:port 
SET HTTPS_PROXY=http://username:[email protected]:port 

Композитор не будет работать с цитатами, он использует основную функцию PHP «parse_url» для анализа переменной:

С кавычками:

php -r "print_r(parse_url('\"http://username:[email protected]:8080\"'));" 

Array 
(
    [path] => "http://username:[email protected]:8080" 
) 

без кавычек:

php -r "print_r(parse_url('http://username:[email protected]:8080'));" 

Array 
(
    [scheme] => http 
    [host] => proxy 
    [port] => 8080 
    [user] => username 
    [pass] => password 
) 

3) Убедитесь, что файл сертификации или путь правильно установить для HTTPS соединений

Composer будет использовать сперва читаемый файл или путь в следующем порядке:

  • Env переменные:

    SSL_CERT_FILE 
    SSL_CERT_DIR 
    
  • PHP.ини:

    openssl.cafile 
    openssl.capath 
    
  • Файлы:

    /etc/pki/tls/certs/ca-bundle.crt 
        /etc/ssl/certs/ca-certificates.crt 
        /etc/ssl/ca-bundle.pem 
        /usr/local/share/certs/ca-root-nss.crt 
        /usr/ssl/certs/ca-bundle.crt 
        /opt/local/share/curl/curl-ca-bundle.crt 
        /usr/local/share/curl/curl-ca-bundle.crt 
        /usr/share/ssl/certs/ca-bundle.crt 
        /etc/ssl/cert.pem 
        /usr/local/etc/ssl/cert.pem 
        /usr/local/etc/openssl/cert.pem 
    
  • Непустая папка:

    /etc/pki/tls/certs/ 
        /etc/ssl/certs/ 
        /etc/ssl/ 
        /usr/local/share/certs/ 
        /usr/ssl/certs/ 
        /opt/local/share/curl/ 
        /usr/local/share/curl/ 
        /usr/share/ssl/certs/ 
        /etc/ssl/ 
        /usr/local/etc/ssl/ 
        /usr/local/etc/openssl/ 
    

Если ни один из вышеперечисленных не является действительным, композитор будет использовать встроенный файл:

composer.phar /vendor/composer/ca-bundle/res/cacert.pem 

4) Если вы испытываете «сертификат верифицировать не удалось» ошибку

[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 open stream: Cannot connect to HTTPS server through proxy 

Это означает, что используемый CA файл или путь не содержит необходимые сертификаты.

Вы можете затем:

  • извлечь файл по умолчанию из composer.phar:

    php -r "(new Phar('composer.phar'))->extractTo('/tmp/cacert/', 'vendor/composer/ca-bundle/res/cacert.pem');" 
    
  • затем добавить необходимые сертификаты (например, ваша компания прокси-сертификаты) до конца файла

  • и принудительно использовать этот файл в php.ini

    [openssl] 
    ; The location of a Certificate Authority (CA) file on the local filesystem 
    ; to use when verifying the identity of SSL/TLS peers. Most users should 
    ; not specify a value for this directive as PHP will attempt to use the 
    ; OS-managed cert stores in its absence. If specified, this value may  still 
    ; be overridden on a per-stream basis via the "cafile" SSL stream context 
    ; option. 
    openssl.cafile=/tmp/cacert/vendor/composer/ca-bundle/res/cacert.pem