Как исправить ошибку SSL сертификата при установке пакета через Composer? При выполнении команды ‘composer require symfony/var-dumper’ возникает ошибка curl error 60 с сообщением ‘SSL: no alternative certificate subject name matches target hostname’. Модуль openssl уже загружен, а строка extension=php_openssl в php.ini раскомментирована.
Ошибка SSL сертификата при установке пакетов через Composer - распространенная проблема, особенно при возникновении ошибки curl error 60 с сообщением “SSL: no alternative certificate subject name matches target hostname”. Эта ошибка возникает, когда Composer не может проверить подлинность SSL-сертификата удаленного сервера, что блокирует установку пакетов. Есть несколько эффективных способов исправить эту проблему.
Содержание
- Причины ошибки SSL сертификата в Composer
- Решение 1: Использование пользовательского пакета SSL-сертификатов
- Решение 2: Отключение проверки SSL (временное решение)
- Решение 3: Проверка на вмешательство прокси и файрвола
- Решение 4: Обновление PHP и OpenSSL
- Решение 5: Настройка Composer для работы с SSL
- Решение 6: Проверка центров сертификации
- Дополнительное решение: Установка правильных сертификатов в системе
Причины ошибки SSL сертификата в Composer
Ошибка ssl сертификата при установке пакетов через Composer обычно возникает по нескольким причинам. Прежде чем применять решения, важно понять, что именно вызывает проблему. Согласно официальной документации Composer, эта ошибка чаще всего связана с тем, что сертификат, представленный сервером, не соответствует URL-адресу, который вы используете.
Основные причины проблемы ssl сертификата:
- Устаревший или отсутствующий пакет CA-сертификатов - система не имеет актуальных корневых сертификатов для проверки подлинности
- Вмешательство антивируса или прокси - программы вроде AVG, McAfee или корпоративные прокси-серверы перехватывают SSL-трафик и заменяют сертификаты
- Неправильная конфигурация сети - проблемы с DNS или сетевыми настройками
- Устаревшая версия PHP или OpenSSL - старые версии могут иметь проблемы с новыми протоколами SSL/TLS
Как указано в обсуждении на Stack Overflow, такие решения для бизнеса, как ZScaler, перехватывают SSL-трафик и перешифровывают его с помощью собственного сертификата, который не является доверенным, поэтому Composer (или любая другая программа, обращающаяся к сайтам через https) выдает ошибку “unable to get local issuer certificate”.
Решение 1: Использование пользовательского пакета SSL-сертификатов
Одним из самых надежных способов исправить ошибку ssl сертификата является использование актуального пакета CA-сертификатов. Многие пользователи сталкиваются с проблемой ssl сертификата, потому что их система использует устаревший список доверенных центров сертификации.
Шаги для исправления:
-
Скачайте актуальный пакет сертификатов:
bashwget http://curl.haxx.se/ca/cacert.pem
-
Сохраните файл в надежном месте, например:
/etc/ssl/certs/cacert.pem -
Настройте Composer для использования этого файла:
bashcomposer config --global cafile /etc/ssl/certs/cacert.pem
-
Проверьте, что конфигурация применилась:
bashcomposer global config --list
Этот метод эффективен, потому что он обновляет список доверенных центров сертификации, что решает проблему ssl сертификата. Как отмечено в статье на CSDN, ошибка “SSL: no alternative certificate subject name matches target hostname” обычно связана с неверным или устаревшим CA-bundle. Используя актуальный cacert.pem, вы устраняете корневую причину проблемы ssl сертификата.
Решение 2: Отключение проверки SSL (временное решение)
Для быстрого решения проблемы ssl сертификата можно временно отключить проверку SSL. Хотя это небезопасно для производственных систем, это полезно для локальной разработки или тестирования.
Чтобы отключить проверку SSL в Composer:
-
Установите конфигурацию для отключения проверки SSL:
bashcomposer config --global disable-tls true -
Или установите verify-peer в false (как предложено в GitHub issue):
bashcomposer config --global repo.packagator composer https://repo.packagator.com --ssl-no-verify
-
Попробуйте установить пакет снова:
bashcomposer require symfony/var-dumper
Важно понимать, что это решение создает уязвимость безопасности, так как отключает проверку подлинности SSL-сертификатов. Используйте его только в контролируемой среде и только как временное решение для ssl сертификата.
Решение 3: Проверка на вмешательство прокси и файрвола
Часто проблема ssl сертификата возникает из-за вмешательства антивирусов или корпоративных систем безопасности. Как объясняется в статье о фиксинге SSL ошибок в Laravel, антивирусы вроде AVG имеют защиту веб-трафика (HTTPS сканирование), которая перехватывает SSL-трафик и блокирует проверку сертификата Composer.
Проверьте и настройте следующие компоненты безопасности:
-
Антивирусное ПО:
- Отключите защиту HTTPS сканирования в антивирусе
- Добавьте Composer в исключения антивируса
- Временно отключите антивирус для тестирования
-
Корпоративный прокси-сервер:
bashcomposer config --global repo.packagator composer https://repo.packagator.com --proxy http://proxy.company.com:8080
-
Файрвол:
- Убедитесь, что Composer имеет доступ к внешним сетевым ресурсам
- Проверьте настройки файрвола для портов 443 и 80
-
ZScaler и подобные решения:
- Как отмечено в обсуждении на Stack Overflow, ZScaler и подобные перехватывают SSL-трафик, что вызывает ошибку ssl сертификата. Обратитесь к вашему сетевому администратору.
Решение 4: Обновление PHP и OpenSSL
Иногда ошибка ssl сертификата возникает из-за устаревших версий PHP или OpenSSL. Хотя вы подтвердили, что модуль OpenSSL загружен, его версия также важна.
Проверьте и обновите компоненты:
-
Проверьте версию PHP:
bashphp -v
-
Проверьте версию OpenSSL:
bashphp -i | grep OpenSSL
-
Обновите PHP до последней стабильной версии:
bash# Для Ubuntu/Debian sudo apt update && sudo apt upgrade php php-cli php-curl # Для CentOS/RHEL sudo yum update php php-cli php-curl -
Переустановите расширение OpenSSL:
bash# Для Ubuntu/Debian sudo apt reinstall php-openssl # Для CentOS/RHEL sudo yum reinstall php-openssl
Старые версии PHP и OpenSSL могут иметь проблемы с современными протоколами SSL/TLS, что приводит к ошибке ssl сертификата. Обновление часто решает эту проблему.
Решение 5: Настройка Composer для работы с SSL
Composer имеет несколько встроенных опций для настройки работы с SSL. Эти настройки помогут исправить ошибку ssl сертификата.
Основные конфигурации SSL для Composer:
-
Установите предпочитаемый протокол SSL:
bashcomposer config --global preferred-install dist
-
Настройте время ожидания SSL:
bashcomposer config --global repo.packagator composer https://repo.packagator.com --ssl-verify-timeout 30
-
Используйте Composer с опциями SSL:
bashCOMPOSER_PROCESS_TIMEOUT=600 composer require symfony/var-dumper
-
Полная конфигурация SSL для Composer:
bashcomposer config --global repo.packagator composer https://repo.packagator.com \ --ssl-verify-timeout 30 \ --prefer-dist \ --no-plugins
Как указано в официальной документации Composer, ошибка “SSL: no alternative certificate subject name matches target hostname” обычно означает, что сертификат, представленный сервером, не соответствует URL-адресу, к которому вы обращаетесь. Убедитесь, что вы используете правильный домен (например, github.com, а не github.com:443).
Решение 6: Проверка центров сертификации
Иногда проблема ssl сертификата связана с отсутствием правильных центров сертификации в системе.
Проверьте и настройте центры сертификации:
-
Проверьте установленные центры сертификации:
bashopenssl version -a
-
Проверьте доступные CA-сертификаты:
bashls -la /etc/ssl/certs/ -
Установите недостающие CA-сертификаты:
bash# Для Ubuntu/Debian sudo apt install ca-certificates # Для CentOS/RHEL sudo yum install ca-certificates -
Обновите доверенные сертификаты:
bashsudo update-ca-trust -
Проверьте работу cURL с SSL:
bashcurl -v https://packagist.org
Если у вашей системы отсутствуют актуальные центры сертификации, Composer не сможет проверить подлинность SSL-сертификатов серверов пакетов, что приведет к ошибке ssl сертификата.
Дополнительное решение: Установка правильных сертификатов в системе
В некоторых случаях, особенно в корпоративных средах, требуются дополнительные шаги для правильной настройки SSL-сертификатов.
Расширенные настройки SSL:
-
Установите корпоративные CA-сертификаты:
bash# Скопируйте корпоративные CA-сертификаты в систему sudo cp /path/to/corporate-ca.crt /usr/local/share/ca-certificates/ # Обновите доверенные сертификаты sudo update-ca-certificates -
Настройте PHP для использования конкретного CA-файла:
bash# Отредактируйте php.ini sudo nano /etc/php/X.Y/cli/php.ini # Добавьте или измените строку openssl.cafile=/etc/ssl/certs/cacert.pem -
Перезапустите PHP CLI:
bashsudo systemctl restart phpX.Y-fpm -
Проверьте конфигурацию SSL:
bashphp -r "echo OPENSSL_VERSION;"
В корпоративных средах часто используются собственные центры сертификации для внутреннего HTTPS-трафика. Настройка этих сертификатов в системе и в PHP может решить проблему ssl сертификата.
Заключение
Ошибка ssl сертификата при установке пакетов через Composer - распространенная проблема, но она решаема. Мы рассмотрели несколько эффективных способов исправить эту ошибку, от использования актуальных пакетов CA-сертификатов до настройки Composer и проверки вмешательства антивирусов.
Основные выводы для исправления ошибки ssl сертификата:
- Наиболее надежное решение - использование актуального пакета CA-сертификатов через конфигурацию Composer
- Временное решение - отключение проверки SSL для разработки (не рекомендуется для продакшена)
- Часто проблема - связана с вмешательством антивирусов или корпоративных прокси
- Профилактика - регулярное обновление PHP и OpenSSL для поддержки современных протоколов SSL/TLS
Для большинства пользователей установка актуального cacert.pem и настройка Composer для его использования через composer config --global cafile /path/to/cacert.pem решит проблему ssl сертификата. Если проблема persists, проверьте на вмешательство антивируса или прокси-сервера.