Вот ключевые моменты, чтобы сделать 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
Скопируйте или вставьте здесь ошибку, а не отправьте снимок экрана. – bfontaine