Проблемы с SSL после множества пересборок

Третий пост подряд… потому что мне кажется, что при редактировании оно не отображается в новых ответах.

Я сделал всё, что вы говорили. Я импортировал всё. Импортер остановлен, приложение запущено. Но всё равно не могу подключиться к своему сайту :frowning:

Firefox пишет: «Упс. У нас возникли проблемы с поиском этого сайта. Не удаётся подключиться к серверу [мой сайт Discourse]»

…держу кулачки в надежде, что кто-нибудь знает ответ

С таким небольшим количеством информации трудно дать ответ. Всё, что мы знаем, — ваш сайт недоступен.

  • Вы проверили логи? Что они показывают?
  • Вы подождали несколько минут после запуска приложения? Сайт может стать доступным не сразу.

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

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

Отвечая на ваши вопросы: я установил Discourse самостоятельно на Droplet от DigitalOcean. Всё работало отлично, импорт тоже прошёл успешно. Однако мне пришлось выполнить полный повторный импорт, так как я забыл указать пути к смайликам. Из-за этого мне пришлось удалить всё. Но с тех пор начались проблемы.

Мне удалось один раз подключиться к своему форуму, чтобы восстановить резервную копию всех настроек (тема и т. д.) перед импортом. Затем я был вынужден прервать импорт, потому что допустил ошибку в указании пути к смайликам, и мне пришлось начать всё сначала. Поэтому я снова удалил всё и попытался выполнить повторный импорт (как мне казалось).

Однако с тех пор я больше не могу подключиться к сайту. Утилита Discourse Doctor показывает, что всё в порядке, за исключением того, что она не может найти версию моего Discourse. Что касается логов, пожалуйста, подскажите команду для их просмотра, и я проверю. Да, я ждал, ждал и ещё раз ждал… но подключения всё нет.

Я совершенно не понимаю, куда мне смотреть, чтобы решить эту проблему. Если у вас есть какие-либо идеи, пожалуйста, дайте знать :slight_smile:

Редакция: так, я выяснил, как проверить логи… и они полны ошибок SSL. Поэтому я сейчас пытаюсь переустановить новый сертификат, следуя этой инструкции: Set up HTTPS support with Let's Encrypt — очень надеюсь, что это поможет.

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

Что касается остального: так как вы используете DO, в будущем делайте снимок в DO каждый раз, когда достигаете шага, к которому хотите иметь возможность вернуться в случае возникновения каких-либо проблем.

Огромное спасибо за совет насчёт снапшотов. Я обязательно запомню это на будущее!

Кроме того, мне удалось исправить проблему, восстановив директорию SSL из созданной мной резервной копии. Оказалось, что каким-то образом сертификаты превратились в файлы размером 0 КБ — странно. Когда я вернул старые файлы, я снова смог зайти.

Спасибо всем за помощь и поддержку. Теперь, думаю, мои предыдущие сообщения больше подошли бы к разделам «Поддержка» или «SSL» (хотя тогда я об этом, конечно, не знал).

Редактирование: обновление — после пересборки приложения SSL каким-то образом удаляется каждый раз. Не запрашивает ли он сертификат Let’s Encrypt при каждой пересборке? Если да, то я понимаю, что система могла посчитать, что я запрашивал его слишком часто… Я пересобирал приложение так много раз, пытаясь понять, в чём проблема.

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

Кажется, можно получить пять сертификатов за семь дней:

Одна из этих ошибок, похоже, означает, что ваше доменное имя не указывает на правильный IP-адрес.

Спасибо, JahDu. Тогда ещё более странно, что после пересборки SSL-ключи не настроены правильно.

@Jay, это действительно странно, потому что раньше всё работало, с тем же IP и всем остальным. Домен указывает на правильный IP.

Discourse размещён на поддомене моего основного домена, оба находятся на разных серверах, и у поддомена был другой IP, чем у основного домена. Но поддомен указан в настройках SSL.

Я бы перепроверил app.yml, но сейчас идёт процесс пересборки 100 тысяч постов (для работы плагина), и это занимает много времени…

edit: перепроверил app.yml, но с момента, когда всё работало, ничего не изменилось.
Куда мне смотреть дальше?

Я только что выполнил повторный импорт. На этот раз без пересборки приложения. Я восстановил резервную копию, а затем импортировал базу данных phpbb3. После импорта, как и в прошлый раз, SSL-ключи были повреждены. Я ничего не пересобирал, просто запускал и останавливал контейнеры app.yml и import.yml.

Я в тупике. Разве восстановление резервной копии через админ-панель (CP) приводит к повреждению SSL? Я не проверял директорию SSL до завершения импорта, поэтому не знаю, когда именно это произошло.

Кто-нибудь может пролить свет на эту ситуацию?

Есть ли какие-либо подробности об ошибке с SSL? Например, из логов? Я всё ещё предполагаю, что ваш домен заблокирован LE, но без деталей из лога трудно сказать наверняка.

Суть проблемы в том, что файлы в каталоге SSL каким-то образом перезаписываются: файлы .key и/или .cer становятся размером 0 КБ вместо ожидаемых ~3 КБ. При этом «повреждаются» (обнуляются) только один или два файла, а не все. Я решаю это, копируя обратно резервные копии, но это лишь временное решение.

В логах (до исправления файлов) постоянно повторяется эта ошибка:

nginx: [emerg] cannot load certificate “/shared/ssl/[mydomain]_ecc.cer”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/shared/ssl/[domain]_ecc.cer’,‘r’) error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate “/shared/ssl/[domain]_ecc.cer”: PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

Пожалуйста, просмотрите файл /shared/letsencrypt/acme.sh.log внутри контейнера, чтобы узнать, что происходит.

Ах, я не знал, что там тоже есть логи :slight_smile: спасибо, что обратили внимание!

Там происходит много всего, похоже, что при каждой пересборке сертификаты обновлялись? Потому что там очень много операций обновления. И @helmi прав, думаю, это именно то, что вы имеете в виду:

[Сб 25 янв 2020 18:48:31 UTC] Ошибка создания нового заказа. Le_OrderFinalize не найдено. {
“type”: “urn:ietf:params:acme:error:rateLimited”,
“detail”: "Ошибка при создании нового заказа :: для точного набора доменов уже выдано слишком много сертификатов: $
“status”: 429

Так… как мне обойти это?

редактирование: согласно letsencrypt:

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

а затем я нашел Rate Limits - Let's Encrypt

так что… думаю, мне просто придется подождать неделю…

редактирование 2: я проверил на https://crt.sh/, и за последнюю неделю я вижу только 10 сертификатов? не 50…

вопрос: когда он считает сертификат обновлением? только при пересборке приложения, я полагаю?

У вас имя хоста с регистром букв? Я думал, что код теперь приводит его к нижнему регистру, но это лишь моё предположение. Я вполне уверен, что при пересборке обычно не запрашивается новый сертификат, если он действителен.

Вы имеете в виду то, что указано в app.yml в параметре DISCOURSE_HOSTNAME?
Нет, там всё в нижнем регистре.

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

Спасибо :slight_smile: Как/где я могу проверить, не удалось ли им? Знаете ли вы, какую ошибку мне следует искать в логах?

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

Кстати: Let’s Encrypt рекомендует использовать «тестовый» режим (staging), чтобы избежать ограничений на получение сертификатов, с которыми можно столкнуться в производственном режиме. Лимит в 5 неудачных попыток сбрасывается через 1 час. :wink:

Спасибо, Джим, я сделаю это, когда ошибки вернутся.
Я только что сделал ещё одну пересборку, и, о чудо, ошибки SSL не было!