Сборка iPXE с поддержкой HTTPS

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

Я создал сертификаты с помощью acme.sh (let’s encrypt) для своего домашнего маршрутизатора OpenWrt.

В конце было сообщение

[Пт Ноя 29 18:xx:xx UTC 2024] Промежуточный CA сертификат находится по адресу: /root/.acme.sh/somefqdn_ecc/ca.cer
[Пт Ноя 29 18:xx:xx UTC 2024] Полная цепочка сертификатов находится там: /root/.acme.sh/somefqdn_ecc/fullchain.cer

Я конвертировал сертификаты в DER и настроил uHTTPd. Chrome сообщает, что сертификат действителен, если я открываю luci или пытаюсь загрузить файл по https https://somefqdn/isos/undionly.kpxe

Затем я попытался собрать исходный код iPXE https://github.com/ipxe/ipxe.git
Пробовал для коммита 4f7dd7fbba205d413cf9b989f7cdc928fa02caf2 и для a3f1e8fb6707811e6eb90e339d7ebe813fd89a63

Запуская

make bin/ipxe.usb TRUST=$trustca CERT=$trustcert DEBUG=open,httpcore

где $trustca – это файл промежуточного CA /root/.acme.sh/somefqdn_ecc/ca.cer,
$trustcert – это полная цепочка сертификатов находится там: /root/.acme.sh/somefqdn_ecc/fullchain.cer
Обратите внимание, что я использую PEM сертификаты (как указано в документации), точно так же, как я их получаю из acme.sh, но не конвертирую в DER сертификаты.

Сборка завершается успешно. (Для a3f1e8fb6707811e6eb90e339d7ebe813fd89a63 пришлось использовать образ distrobox с Fedora 32 и старым gcc, make и т.д., чтобы избежать ошибок нового компилятора)

Когда я выполняю в KVM ВМ с содержимым bin/ipxe.usb (я запускаю dd для записи на виртуальный жесткий диск), я получаю следующее (я получаю ту же проблему, если я записываю bin/ipxe.usb на USB и пробую на реальной машине)

iPXE> imgfetch https://somefqdn/isos/undionly.kpxe

INTF Oxefe24+18 открытие https URI
https://somefqdn/isos/undionly.kpxe...INTF Oxf0544+18 открытие (SOCK_DGRAM,AF_UNKNOWN) сокета
INTF ©xf01?4+50 открытие (SOCK_STREAM,AF_INET) сокета
Ошибка: x420c6001 (http://ipxe.org/420c6001)
iPXE> imgfetch https://boot.ipxe.org/1mb
INTF @xef6b4+18 открытие https URI
‘boot.ipxe.org/Imb...INTF Oxeffd4+18 открытие (SOCK_DGRAM,AF_UNKNOWN) сокета

INTF @xefca4+50 открытие (SOCK_STREAM,AF_INET) сокета
INTF @xef9?4+18 открытие URI http://ca.ipxe.org/auto/c9Zeb62f.der?subject=MEBxCzA
JBGNUBAYTA LUTHSkuJuYDUQQKEYBIbnk lcm 14CBTZWN1cm] GeSBSZXN1YXU jaCBHem9 1cDEUMBMGA1U
EAXMMSUNSRYBSb2901F gx

INTF @xef974+18 открытие http URI

INTF ©xf@bc4+*18 открытие (SOCK_DGRAM,AF_UNKNOWN) сокета

INTF ©xf@0a4+10 открытие (SOCK_STREAM,AF_INET) сокета

Доступ запрещен (http://ipxe.org/0Z16eb3c)

Что я делаю не так? Как я могу собрать это, чтобы оно работало с HTTPS? Я включил предложенные параметры DEBUG, но ничего не помогает понять, что происходит.
Кажется, что загрузка происходит, так как отображаются точки, как будто что-то загружается, прежде чем появится ошибка, а затем в конце появляется какая-то ошибка.

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

Для успешной сборки iPXE с поддержкой HTTPS и устранения возникших проблем необходимо пройти через несколько ключевых этапов. Ваша текущая установка свидетельствует о том, что сертификаты были созданы корректно и конфигурация uHTTPd работает. Тем не менее, при загрузке iPXE через HTTPS возникают ошибки. Рассмотрим, что можно сделать для решения данной проблемы.

1. Проверка конфигурации сертификатов

Вы упомянули, что для целей сборки были использованы сертификаты в формате PEM. Убедитесь, что файлы ca.cer (сертификат промежуточного CA) и fullchain.cer (полная цепочка сертификатов) действительно находятся в формате PEM. Если вы конвертировали их в DER ранее, но затем использовали исходные PEM-файлы, это должно быть корректно. В любом случае, вы можете использовать утилиту openssl для проверки формата и целостности сертификатов:

openssl x509 -in /root/.acme.sh/somefqdn_ecc/fullchain.cer -text -noout
openssl x509 -in /root/.acme.sh/somefqdn_ecc/ca.cer -text -noout

2. Обновление параметров сборки iPXE

Следующим шагом является настройка параметров сборки в iPXE. Убедитесь, что вы используете правильный путь к сертификатам. Попробуйте указать абсолютные пути и убедитесь, что у вас достаточно прав на чтение этих файлов:

make bin/ipxe.usb TRUST=/root/.acme.sh/somefqdn_ecc/ca.cer CERT=/root/.acme.sh/somefqdn_ecc/fullchain.cer DEBUG=open,httpcore

Также рассмотрите возможность использования параметра CFLAGS для расширения отладки:

make bin/ipxe.usb TRUST=/root/.acme.sh/somefqdn_ecc/ca.cer CERT=/root/.acme.sh/somefqdn_ecc/fullchain.cer CFLAGS="-DDEBUG -DHTTP -DHTTPS" 

3. Проверка сетевых соединений

Ошибки, такие как Error: x420c6001, часто указывают на проблемы с сетевым соединением или SSL. Убедитесь, что ваш маршрутизатор и конфигурация сети позволяют iPXE корректно выполнять HTTPS-запросы. Для этого проверьте следующее:

  • Убедитесь, что DNS-имя somefqdn правильно разрешается в IP-адрес вашего маршрутизатора.
  • При необходимости попробуйте временно заменить https://somefqdn на IP-адрес вашего роутера, например https://192.168.1.1.
  • Используйте утилиты, такие как curl или wget, для тестирования возможности скачивания файла с вашего сервера напрямую:
curl -v https://somefqdn/isos/undionly.kpxe

4. Обработка ошибок SSL

Ошибка может также быть связана с неправильной проверкой сертификатов на уровне iPXE. Убедитесь, что iPXE корректно обрабатывает полученные сертификаты. Если SSL-сертификаты промежуточного CA или другие сертификаты не были правильно установлены или доверены, это может привести к ошибкам.

Для этого возможно потребуется включить дополнительные параметры, позволяющие игнорировать ошибки SSL (не рекомендуется на продуктиве), например:

imgfetch --no-verify https://somefqdn/isos/undionly.kpxe

5. Логи и отладка

Соберите дополнительно логи при выполнении iPXE с включённой отладкой. Для получения более детальной информации о том, что происходит, можно попробовать изменить уровень отладки, увеличив его:

make bin/ipxe.usb TRUST=$trustca CERT=$trustcert DEBUG=open,httpcore,debug

Заключение

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

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

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