SSL-файл .cer нулевой длины

Привет,

Я пытаюсь установить Discourse с официальной страницы GitHub на Ubuntu 22.04 Server LTS — используя последний образ AWS AMI. Сеть настроена, к хосту привязано полное доменное имя (FQDN) и эластичный IP-адрес.

Всё разворачивается корректно, и я могу подключиться к экземпляру nginx на порту 80. Однако подключение через порт 443 не работает, и в логе ошибок nginx повторяется следующая ошибка:

> 2023/10/09 08:41:12 [emerg] 9342#9342: cannot load certificate "/shared/ssl/discourse.xxxx.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

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

./shared/standalone/ssl/discourse.XXXX.com.cer

файл журнала контейнера: app:$/var/log/nginx

Кто-нибудь сталкивался с этой проблемой раньше? Похоже, что дело не в правах доступа, так как всё выполняется от имени sudo.

Честно говоря, в этом я совсем запутался.

РЕДАКТИРОВАНО: Я попытался удалить папки /shared/ssl и letsencrypt, а также выполнить пересборку и переустановку, но результат в обоих случаях остался прежним.

Вы запускали discourse-setup? Он пытается подключиться к самому себе, чтобы проверить, что DNS указывает на сервер и порты открыты, но это довольно грубая проверка.

Если вы запускаете сборку более нескольких раз без правильной настройки DNS и портов, вы упрётесь в лимиты Let’s Encrypt. Если это так, а я так подозреваю, вам придётся ждать неделю или использовать другое поддоменное имя (либо следовать сложным инструкциям для запроса сертификата для нужного вам поддомена и ещё одного).

Я думаю, что если вы запустите docker logs app, то, возможно, увидите, где acme не удаётся получить сертификат.

Привет, Джейсон,
Я столкнулся с той же проблемой, и мне потребовались дни и множество часов, чтобы понять, что именно сломалось и как это исправить. Поэтому надеюсь, что эта информация поможет вам и другим, кто столкнулся с аналогичной проблемой.

При выполнении команды ./discourse-setup я получал следующую ошибку:

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error

В попытках исправить эту ошибку я пробовал следующее:
Я запускал ./discourse-doctor, но безрезультатно.
Я запускал ./launcher rebuild app, также безрезультатно.
Я пытался устранять неполадки внутри контейнера с помощью команды: docker exec -it app /bin/bash.
Так как образ контейнера содержит ограниченный набор инструментов для диагностики, я просто просматривал логи с помощью этой команды:
less /var/log/nginx/error.log
Именно здесь я увидел множество сообщений, содержащих: [emerg] 2832#2832: cannot load certificate.
По какой-то причине мне не удалось найти корень проблемы, но когда я вышел из контейнера и ввел:
./launcher logs app с хоста —
я смог увидеть больше данных и внезапно обнаружил эту ошибку:
“Error creating new order :: too many certificates (5) already issued for this exact set of domains in the last 168 hours , retry after 2024-08-10T12:58:12Z:”
Я искал в Google обходные пути для этой проблемы, но затем решил просто подождать указанное время.
После истечения времени ожидания я снова попробовал выполнить команду: ./launcher rebuild app
На этот раз всё сработало, SSL-сертификаты ( *.cer ) были успешно созданы, и мой сайт заработал.

Мораль этой истории такова: если вы получили пустой сертификат *.cer , вам необходимо проверить логи контейнера, выполнив эту команду с хоста:
root@host:/var/discourse# ./launcher logs app
Прокрутите логи и поищите фразу “too many certificates”.
Если бы я знал это заранее, это сэкономило бы мне дни исследований :frowning:

Предположения, сделанные в моем ответе:

  • Вы подтвердили, что ваш хост правильно настроен с вашим DNS-провайдером.
  • Вы подтвердили, что ваш регистрационный email и настройки SMTP настроены верно.
  • Вы подтвердили, что файл /var/discourse/containers/app.yml был правильно заполнен.