Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Бекенд, разработка серверов
  4. SSL/TLS unable to get local issuer certificate: решение

SSL/TLS unable to get local issuer certificate: решение

Запланировано Прикреплена Закрыта Перенесена Бекенд, разработка серверов
ssltlsсертификаты
1 Сообщения 1 Постеры 4 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал отредактировано
    #1

    Ошибка “unable to get local issuer certificate” — одна из самых частых проблем при работе с HTTPS и защищёнными соединениями. Встречается она в Python, Node.js, cURL, Git и множестве других инструментов. Суть проблемы в том, что система не может проверить цепочку сертификатов сервера, потому что не находит доверенный корневой сертификат.

    Эта ошибка особенно раздражает при работе с корпоративными прокси, самоподписанными сертификатами или устаревшими системами. Знание того, как её решить, сэкономит вам часы отладки и поможет правильно настроить безопасное соединение без компромиссов безопасности.

    Почему вообще происходит эта ошибка

    Когда приложение пытается подключиться к серверу через HTTPS, оно проверяет SSL/TLS сертификат сервера. Проверка — это не просто просмотр самого сертификата, а полная валидация цепочки доверия. Сертификат сервера обычно подписан промежуточным центром сертификации (intermediate CA), а тот, в свою очередь, подписан корневым центром (root CA).

    Ошибка возникает, когда локальное хранилище сертификатов вашей системы не содержит необходимого корневого или промежуточного сертификата из этой цепочки. Это может происходить по нескольким причинам:

    • Устаревшее хранилище CA сертификатов — система давно не обновляла список доверенных центров, и новые корневые сертификаты просто не установлены
    • Неправильный путь к CA bundle — приложение смотрит в неправильное место и не находит файл с сертификатами
    • Корпоративный прокси или firewall — они блокируют или модифицируют SSL-соединение, требуя дополнительных сертификатов
    • Самоподписанные сертификаты — в разработке часто используются сертификаты, которые никто не подписывал, и система их попросту не знает
    • Неполная цепочка на сервере — сервер отправляет только сертификат, но не промежуточные сертификаты

    Как исправить в разных языках и инструментах

    Способ решения зависит от того, где именно вы столкнулись с ошибкой. Давайте разберём самые частые случаи.

    Python и requests

    Если вы используете библиотеку requests для HTTP запросов в Python, проблема обычно в том, что версия пакета certifi (который хранит список доверенных сертификатов) устаревшая. Первое, что нужно сделать — обновить его:

    pip install --upgrade certifi
    

    Это часто решает проблему, потому что certifi регулярно обновляется с новыми корневыми сертификатами. Если обновление не помогло, можно явно указать путь к CA bundle:

    import ssl
    import certifi
    
    ssl_context = ssl.create_default_context(cafile=certifi.where())
    

    Если у вас корпоративный сертификат, сохраните его в файл и используйте так:

    import requests
    
    response = requests.get(
        'https://your-domain.com',
        verify='/path/to/your-ca-bundle.pem'
    )
    

    Node.js

    В Node.js ситуация похожа, но настраивается через переменную окружения. Установите переменную NODE_EXTRA_CA_CERTS, указав путь к вашему сертификату:

    export NODE_EXTRA_CA_CERTS="/path/to/your-ca-bundle.pem"
    node your-app.js
    

    Она работает для всех Node.js приложений, запущенных в этой сессии терминала. Если нужно постоянно, добавьте это в .bashrc или .zshrc.

    Для Azure DevOps или CI/CD пайплайнов переменная указывается в конфиге:

    variables:
      NODE_EXTRA_CA_CERTS: $(Build.SourcesDirectory)/certs/my-root-ca.pem
    

    cURL

    cURL — это утилита, которая часто используется в скриптах и вебхуках. Если вы получаете ошибку при запросе, сначала обновите пакет ca-certificates:

    # Для Debian/Ubuntu
    sudo apt-get update
    sudo apt-get install ca-certificates
    
    # Для macOS
    brew update
    brew install curl-ca-bundle
    

    Если это не поможет, укажите сертификат напрямую в команде:

    curl --cacert /path/to/custom-ca.pem https://your-domain.com
    

    Или укажите директорию с сертификатами:

    curl --capath /etc/ssl/certs https://your-domain.com
    

    Git

    Git часто ругается на самоподписанные или внутренние сертификаты. Есть несколько подходов:

    Обновить корневые сертификаты в системе. На Linux:

    sudo update-ca-certificates
    

    Если нужно быстро, но небезопасно, отключить проверку (только для разработки!):

    git config --global http.sslVerify false
    

    Боле правильный способ — добавить корпоративный сертификат в конфиг Git:

    git config --global http.sslCAInfo /path/to/your-ca-bundle.pem
    

    Postman

    В Postman удобнее всего работать с настройками. Если у вас корпоративный сертификат:

    1. Откройте Settings → Certificates → CA Certificates
    2. Загрузите ваш CA bundle (полный сертификат с цепочкой)
    3. Перезагрузите Postman
    4. Включите проверку сертификатов в Settings → General → SSL certificate verification

    Можно также отключить проверку в Settings → General, но это небезопасно для продакшена.

    Таблица решений по ситуациям

    Ситуация Решение Риск
    Устаревшие CA сертификаты Обновить certifi, ca-certificates, curl Минимальный
    Корпоративный прокси Загрузить корневой и промежуточный сертификаты компании Минимальный
    Самоподписанный сертификат в разработке Добавить сертификат в trusted store или отключить проверку Высокий если в продакшене
    Неполная цепочка на сервере Настроить сервер на отправку полной цепочки Нулевой
    Старая версия OpenSSL Обновить OpenSSL и системные библиотеки Минимальный

    Когда отключение проверки — это нормально

    Это важный момент, потому что в интернете часто советуют просто отключить проверку сертификатов. Это работает, но… никогда не делайте это в продакшене. Это открывает двери для man-in-the-middle атак.

    Отключение проверки допустимо только в очень специфических ситуациях:

    • Локальная разработка с самоподписанными сертификатами
    • Тестирование в контролируемой среде (вроде CI/CD для тестов)
    • Временная отладка, когда вы точно знаете, что соединение безопасно

    Если вы в корпоративной сети и сталкиваетесь с этой ошибкой постоянно, это признак того, что нужно правильно добавить корпоративные сертификаты, а не отключать проверку.

    Практические советы, которые работают

    Сначала всегда пытайтесь самый простой путь — обновление системных сертификатов. Это решает большинство проблем:

    # macOS
    brew install curl-ca-bundle
    
    # Ubuntu/Debian
    sudo apt-get install ca-certificates
    sudo update-ca-certificates
    
    # Windows (PowerShell)
    certutil -generateSSTFromWU roots.sst
    

    Если это не помогло, найдите, где именно хранятся сертификаты в вашей системе. Для разных ОС это разные места:

    • macOS: /usr/local/etc/openssl/cert.pem или через certifi.where() в Python
    • Linux: /etc/ssl/certs/ca-certificates.crt или /etc/ssl/certs/
    • Windows: Хранилище сертификатов системы (можно открыть через certlm.msc)

    Проверьте, что ваше приложение смотрит в правильное место. Например, в Python:

    import certifi
    print(certifi.where())
    

    Это покажет точный путь к CA bundle, который использует Python.

    Если у вас есть корпоративный сертификат, убедитесь, что вы загружаете полную цепочку (root + intermediate + leaf), а не только один сертификат. Часто проблема именно в этом — забывают про промежуточный уровень.

    На что стоит обратить внимание дальше

    Эта ошибка часто указывает на более глубокие проблемы в настройке инфраструктуры. Если вы постоянно сталкиваетесь с ней, имеет смысл провести аудит SSL/TLS конфигурации на ваших серверах и в клиентских приложениях. Проверьте, что сервер правильно отправляет полную цепочку сертификатов, что все промежуточные CA включены, и что версии OpenSSL актуальны. Для глубокого анализа можно использовать онлайн-сервисы вроде SSL Labs. Также подумайте о том, имеет ли смысл вообще использовать самоподписанные сертификаты в разработке — может быть, проще настроить Let’s Encrypt для локальной сети или использовать инструменты вроде mkcert для генерации доверенных сертификатов на лету.

    1 ответ Последний ответ
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы