Задать вопрос

Почему busybox wget не работает, пока не запустить вручную openssl?

Захотелось глубже вникнуть в устройства линукса.
Собрал минимальную систему, состоящую из ядра 6.13, initrd, busybox и openssl. Всё из исходников из оф.сайтов. Всё дефолтное.
Больше ничего.
Заметил такую странность:
Команда wget на какой-нибудь https, ну например такая:
$ wget --no-check-certificate https://ya.ru
заканчивается неудачей и сообщением "Connection reset by peer"

Но если я один раз введу команду:
$ openssl s_client -connect ya.ru:443 -servername ya.ru
то после этого wget прекрасно скачивает и с яндекса, и с любых других сайтов. Это работает до перезапуска линукса. Затем снова приходится выполнять openssl чтобы заработал wget.
Нигде винтернетах не видел такую проблему. Везде пишут, мол просто установи openssl и wget сам сделает всё остальное.

Из-за чего это происходит?

IP российский белый, никаких прокси.
  • Вопрос задан
  • 3171 просмотр
Подписаться 8 Простой 8 комментариев
Решения вопроса 1
@junecover Автор вопроса
Сам спросил, сам и отвечу.
Лишний раз подтвердилась народная мудрость, чтобы найти ответ, надо правильно сформулировать вопрос. Гугл помог найти решение по запросу "busybox wget is shitty". Я не силён в английском, поэтому не стану углубляться семантику этих слов. Кому надо, тот сам поймёт.

Теперь ближе к теме.

У busybox wget есть давняя неисправнось в некой сущности "Support HTTPS using internal TLS code". Попросту говоря эта часть безнадёжно устарела и не работает в 2025 году.
Решение проблемы:
Скомпилировать busybox с отключённой опцией
-> Networking Utilities
    -> wget (41 kb) (WGET [=y])
      FEATURE_WGET_HTTPS [=n]

и со включённой опцией "Try to connect to HTTPS using openssl"
-> Networking Utilities
    -> wget (41 kb) (WGET [=y])
      FEATURE_WGET_OPENSSL [=y]


И ещё добавить алиас:
alias wget='wget --no-check-certificate'
Тогда busybox-овский wget станет сам без лишних пинков работать с https.

Почему так? Ве́домо только разработчикам busybox.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
По больше бы таких интересных вопросов.

Задал ваш вопрос openai:o1-preview, ответ выглядит очень логичным:
Вызвано недостаточной энтропией в генераторе случайных чисел (RNG) вашей минимальной системы.
В системах Linux безопасные операции, такие как установление SSL/TLS-соединений, требуют случайных чисел, сгенерированных из системного пула энтропии.
В вашей минимальной системе очень мало активности для генерации энтропии (например, нет дискового ввода-вывода, сетевой активности, пользовательского ввода), поэтому пул энтропии мал.

Когда `wget` пытается установить HTTPS-соединение, он полагается на эту энтропию. Если ее недостаточно, библиотека SSL не может сгенерировать необходимые случайные значения, что приводит к сбоям соединения, таким как «Сброс соединения одноранговым узлом».
...
Когда вы запускаете `openssl s_client`, он выполняет операции, которые помогают накапливать энтропию.

**Как это исправить:**

1. **Убедитесь, что `/dev/random` и `/dev/urandom` существуют:**
- Убедитесь, что в вашей системе есть эти устройства:
```sh
ls -l /dev/random /dev/urandom
```
- Если их нет, создайте их:
```sh
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
```

2. **Заполните пул энтропии при запуске:**
- **Используйте демон сбора энтропии:**
- Включите в свою сборку такой инструмент, как `haveged` или `rng-tools`. Эти демоны генерируют энтропию на основе таймеров или аппаратных ГСЧ.
- Например, с `haveged`:
- Скомпилируйте и установите `haveged` в свою систему.
- Запустите его при запуске:
```sh
haveged -w 1024
```
- **Ручное заполнение энтропии (менее безопасно):**
- Если добавление демона невозможно, вы можете вручную заполнить энтропию (обратите внимание, что это менее безопасно и не рекомендуется для производства):
```sh
dd if=/dev/urandom of=/dev/random bs=1 count=512
```
- Эта команда записывает случайные данные обратно в `/dev/random`, помогая заполнить пул энтропии.

3. **Проверьте уровни энтропии:**
- Отслеживайте доступную энтропию:
```sh
cat /proc/sys/kernel/random/entropy_avail
```
- Значение ниже 100 может привести к блокировке или сбою операций SSL.

4. **Используйте аппаратный генератор случайных чисел (если доступен):**
...

Посмотри, что показывает cat /proc/sys/kernel/random/entropy_avail
Ответ написан
@Enterneter
Это косяк от wget, наверняка, напиши им сюда с этим вопросом https://www.gnu.org/software/wget/manual/html_node...

А пока можешь curl попробовать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы