Проблема с сертификатом SSL: не удается получить локальный сертификат центра сертификации

Вопрос или проблема

У меня есть небольшой initramfs с встроенным статическим busybox. Единственная цель этого initramfs – загружать/выгружать файлы на HTTPS-сервер.

У меня есть правильный сертификат и учетные данные для этого. Но когда я выполняю команду:

curl --cacert /tmp/filename.pem -T /tmp/file_to_upload -u user:pass https://Server_name/

Я получаю ошибку:

curl: (60) Проблема с SSL-сертификатом: невозможно получить локальный сертификат удостоверяющего центра

Если я использую ту же команду с тем же сертификатом на Ubuntu, то все работает гладко.

Как мне решить эту проблему?

ИЗМЕНЕНИЕ: Я не хочу использовать флаг “-k” или “–insecure”

ПРИМЕЧАНИЕ: У меня нет openssl или каталога /etc/ssl в initramfs

Поскольку у вас нет /etc/ssl, я советую добавить опцию curl -k в вашу команду.

-k, –insecure
(SSL) Эта опция явно позволяет curl выполнять “незащищенные”
SSL-соединения и передачи. Все SSL-соединения пытаются установить безопасное соединение с использованием установленного по умолчанию пакета CA сертификатов. Это делает все соединения, которые считаются “незащищенными”, неудачными, если не используется -k, –insecure.

С учетом вашего изменения, что вы не хотите -k, другой вариант – создать /etc/ssl/certs и добавить в него корневые сертификаты, поддерживающие цепочку доверия к вашему сертификату. Однако для этого вам нужно установить openssl или хотя бы иметь файл конфигурации /etc/ssl/openssl.cnf.

Третий вариант – просто объединить в “filename.pem” все необходимые сертификаты, чтобы завершить цепочку доверия в порядке важности (т.е. если есть промежуточные ЦА, корневой ЦА идет последним). Это работает в некоторых программных настройках (Apache, FreeRadius, я никогда лично не пробовал с curl).

Ответ или решение

Проблема с SSL сертификатом: невозможно получить локальный сертификат удостоверяющего центра

Ваш случай использования curl в статическом initramfs с BusyBox указывает на определенные сложности при установлении безопасного HTTPS-соединения. Ошибка, с которой вы столкнулись:

curl: (60) SSL certificate problem: unable to get local issuer certificate

указывает на то, что curl не может проверить действительность SSL-сертификата сервера из-за отсутствия цепочки доверия, что, в свою очередь, связано с отсутствующими промежуточными или корневыми сертификатами на вашей системе.

Причины проблемы

  1. Отсутствие корневых сертификатов: На вашей системе отсутствуют необходимые корневые и промежуточные сертификаты для верификации сервера.
  2. Статичная среда: Вы используете статический initramfs, который по умолчанию не включает библиотеку OpenSSL и директорию /etc/ssl, что делает невозможным использование стандартных механизмов для проверки сертификатов.

Решения

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

  1. Конкатенация сертификатов:
    Вы можете попробовать объединить ваш сертификат с необходимыми корневыми и промежуточными сертификатами в один файл. Убедитесь, что порядок сертификатов в файле соответствует правилам (корневой CA в конце). Это может выглядеть следующим образом:

    cat intermediate.pem >> filename.pem
    cat root.pem >> filename.pem

    Затем выполните ту же команду curl, указав обновленный файл:

    curl --cacert /tmp/filename.pem -T /tmp/file_to_upload -u user:pass https://Server_name/
  2. Добавление сертификатов в файловую систему:
    Если возможно, добавьте необходимые корневые сертификаты в папку /etc/ssl/certs. Однако для выполнения этого может потребоваться openssl, так как необходимо правильно организовать сертификаты и создать файл конфигурации /etc/ssl/openssl.cnf, который будет содержать требуемые параметры для проведения верификации.

  3. Перенос OpenSSL:
    Если openssl отсутствует в вашей среде, рассмотрите возможность добавления минимально необходимой версии openssl и соответствующих динамических библиотек в ваше initramfs. Это позволит использовать стандартные механизмы для работы с сертификатами и упрощение их верификации.

Заключение

Даже несмотря на ваши предпочтения не использовать опцию -k или --insecure, использование этой опции может быть временным решением в случае крайней необходимости, но я настоятельно рекомендую решить проблему с верификацией сертификатов. Убедитесь, что у вас есть все необходимые сертификаты для успешного завершения HTTPS-запросов. Создание полноценной цепочки доверия между вашим клиентом и сервером обеспечит безопасность ваших данных и защитит от атак типа "человек посередине".

Оцените материал
Добавить комментарий

Капча загружается...