Веб

Как исправить ошибку SSL сертификата в Composer

Решение ошибки SSL сертификата в Composer: способы исправить curl error 60 и проблемы с проверкой SSL при установке пакетов.

Как исправить ошибку 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

Ошибка ssl сертификата при установке пакетов через Composer обычно возникает по нескольким причинам. Прежде чем применять решения, важно понять, что именно вызывает проблему. Согласно официальной документации Composer, эта ошибка чаще всего связана с тем, что сертификат, представленный сервером, не соответствует URL-адресу, который вы используете.

Основные причины проблемы ssl сертификата:

  1. Устаревший или отсутствующий пакет CA-сертификатов - система не имеет актуальных корневых сертификатов для проверки подлинности
  2. Вмешательство антивируса или прокси - программы вроде AVG, McAfee или корпоративные прокси-серверы перехватывают SSL-трафик и заменяют сертификаты
  3. Неправильная конфигурация сети - проблемы с DNS или сетевыми настройками
  4. Устаревшая версия PHP или OpenSSL - старые версии могут иметь проблемы с новыми протоколами SSL/TLS

Как указано в обсуждении на Stack Overflow, такие решения для бизнеса, как ZScaler, перехватывают SSL-трафик и перешифровывают его с помощью собственного сертификата, который не является доверенным, поэтому Composer (или любая другая программа, обращающаяся к сайтам через https) выдает ошибку “unable to get local issuer certificate”.

Решение 1: Использование пользовательского пакета SSL-сертификатов

Одним из самых надежных способов исправить ошибку ssl сертификата является использование актуального пакета CA-сертификатов. Многие пользователи сталкиваются с проблемой ssl сертификата, потому что их система использует устаревший список доверенных центров сертификации.

Шаги для исправления:

  1. Скачайте актуальный пакет сертификатов:

    bash
    wget http://curl.haxx.se/ca/cacert.pem
    
  2. Сохраните файл в надежном месте, например:

    /etc/ssl/certs/cacert.pem
    
  3. Настройте Composer для использования этого файла:

    bash
    composer config --global cafile /etc/ssl/certs/cacert.pem
    
  4. Проверьте, что конфигурация применилась:

    bash
    composer 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:

  1. Установите конфигурацию для отключения проверки SSL:

    bash
    composer config --global disable-tls true
    
  2. Или установите verify-peer в false (как предложено в GitHub issue):

    bash
    composer config --global repo.packagator composer https://repo.packagator.com --ssl-no-verify
    
  3. Попробуйте установить пакет снова:

    bash
    composer require symfony/var-dumper
    

Важно понимать, что это решение создает уязвимость безопасности, так как отключает проверку подлинности SSL-сертификатов. Используйте его только в контролируемой среде и только как временное решение для ssl сертификата.

Решение 3: Проверка на вмешательство прокси и файрвола

Часто проблема ssl сертификата возникает из-за вмешательства антивирусов или корпоративных систем безопасности. Как объясняется в статье о фиксинге SSL ошибок в Laravel, антивирусы вроде AVG имеют защиту веб-трафика (HTTPS сканирование), которая перехватывает SSL-трафик и блокирует проверку сертификата Composer.

Проверьте и настройте следующие компоненты безопасности:

  1. Антивирусное ПО:

    • Отключите защиту HTTPS сканирования в антивирусе
    • Добавьте Composer в исключения антивируса
    • Временно отключите антивирус для тестирования
  2. Корпоративный прокси-сервер:

    bash
    composer config --global repo.packagator composer https://repo.packagator.com --proxy http://proxy.company.com:8080
    
  3. Файрвол:

    • Убедитесь, что Composer имеет доступ к внешним сетевым ресурсам
    • Проверьте настройки файрвола для портов 443 и 80
  4. ZScaler и подобные решения:

    • Как отмечено в обсуждении на Stack Overflow, ZScaler и подобные перехватывают SSL-трафик, что вызывает ошибку ssl сертификата. Обратитесь к вашему сетевому администратору.

Решение 4: Обновление PHP и OpenSSL

Иногда ошибка ssl сертификата возникает из-за устаревших версий PHP или OpenSSL. Хотя вы подтвердили, что модуль OpenSSL загружен, его версия также важна.

Проверьте и обновите компоненты:

  1. Проверьте версию PHP:

    bash
    php -v
    
  2. Проверьте версию OpenSSL:

    bash
    php -i | grep OpenSSL
    
  3. Обновите 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
    
  4. Переустановите расширение 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:

  1. Установите предпочитаемый протокол SSL:

    bash
    composer config --global preferred-install dist
    
  2. Настройте время ожидания SSL:

    bash
    composer config --global repo.packagator composer https://repo.packagator.com --ssl-verify-timeout 30
    
  3. Используйте Composer с опциями SSL:

    bash
    COMPOSER_PROCESS_TIMEOUT=600 composer require symfony/var-dumper
    
  4. Полная конфигурация SSL для Composer:

    bash
    composer 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 сертификата связана с отсутствием правильных центров сертификации в системе.

Проверьте и настройте центры сертификации:

  1. Проверьте установленные центры сертификации:

    bash
    openssl version -a
    
  2. Проверьте доступные CA-сертификаты:

    bash
    ls -la /etc/ssl/certs/
    
  3. Установите недостающие CA-сертификаты:

    bash
    # Для Ubuntu/Debian
    sudo apt install ca-certificates
    
    # Для CentOS/RHEL
    sudo yum install ca-certificates
    
  4. Обновите доверенные сертификаты:

    bash
    sudo update-ca-trust
    
  5. Проверьте работу cURL с SSL:

    bash
    curl -v https://packagist.org
    

Если у вашей системы отсутствуют актуальные центры сертификации, Composer не сможет проверить подлинность SSL-сертификатов серверов пакетов, что приведет к ошибке ssl сертификата.

Дополнительное решение: Установка правильных сертификатов в системе

В некоторых случаях, особенно в корпоративных средах, требуются дополнительные шаги для правильной настройки SSL-сертификатов.

Расширенные настройки SSL:

  1. Установите корпоративные CA-сертификаты:

    bash
    # Скопируйте корпоративные CA-сертификаты в систему
    sudo cp /path/to/corporate-ca.crt /usr/local/share/ca-certificates/
    
    # Обновите доверенные сертификаты
    sudo update-ca-certificates
    
  2. Настройте PHP для использования конкретного CA-файла:

    bash
    # Отредактируйте php.ini
    sudo nano /etc/php/X.Y/cli/php.ini
    
    # Добавьте или измените строку
    openssl.cafile=/etc/ssl/certs/cacert.pem
    
  3. Перезапустите PHP CLI:

    bash
    sudo systemctl restart phpX.Y-fpm
    
  4. Проверьте конфигурацию SSL:

    bash
    php -r "echo OPENSSL_VERSION;"
    

В корпоративных средах часто используются собственные центры сертификации для внутреннего HTTPS-трафика. Настройка этих сертификатов в системе и в PHP может решить проблему ssl сертификата.

Заключение

Ошибка ssl сертификата при установке пакетов через Composer - распространенная проблема, но она решаема. Мы рассмотрели несколько эффективных способов исправить эту ошибку, от использования актуальных пакетов CA-сертификатов до настройки Composer и проверки вмешательства антивирусов.

Основные выводы для исправления ошибки ssl сертификата:

  1. Наиболее надежное решение - использование актуального пакета CA-сертификатов через конфигурацию Composer
  2. Временное решение - отключение проверки SSL для разработки (не рекомендуется для продакшена)
  3. Часто проблема - связана с вмешательством антивирусов или корпоративных прокси
  4. Профилактика - регулярное обновление PHP и OpenSSL для поддержки современных протоколов SSL/TLS

Для большинства пользователей установка актуального cacert.pem и настройка Composer для его использования через composer config --global cafile /path/to/cacert.pem решит проблему ssl сертификата. Если проблема persists, проверьте на вмешательство антивируса или прокси-сервера.

Источники

  1. Stack Overflow: Composer Curl error 60: SSL certificate problem: unable to get local issuer certificate

  2. Rajiv Verma: Fixing “curl error 60: SSL Certificate Problem” in Laravel on Windows

  3. Composer Documentation: Config - SSL

  4. CSDN: 解决cURL error 60: SSL: no alternative certificate subject name matches target host name

  5. GitHub: [Feature] Add SSL option to set verify_peer to false

Авторы
Проверено модерацией
Модерация
Как исправить ошибку SSL сертификата в Composer