# Let's Encrypt: «не удалось получить сертификат издателя» (ошибка 2), принудительный повторный выпуск и лимиты запросов

**URL:** <https://meta.discourse.org/t/lets-encrypt-unable-to-get-issuer-certificate-error-2-forced-reissuance-and-rate-limits/414167>\
**Category:** Bug\
**Tags:** letsencrypt\
**Created:** [07.Октябрь.2026 17:05:24 UTC](https://meta.discourse.org/t/lets-encrypt-unable-to-get-issuer-certificate-error-2-forced-reissuance-and-rate-limits/414167 "2026-10-07T17:05:24Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jmx](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jmx/32/579660_2.png) [@jmx](https://meta.discourse.org/u/jmx)\
**Post date:** [07.Октябрь.2026 17:05:25 UTC](https://meta.discourse.org/t/lets-encrypt-unable-to-get-issuer-certificate-error-2-forced-reissuance-and-rate-limits/414167/1 "2026-10-07T17:05:25Z")

</div>

При установке или пересборке Discourse валидный сертификат Let’s Encrypt может быть отклонён со следующей ошибкой:

```plaintext
C=US, O=Let's Encrypt, CN=YR2
error 2 at 1 depth lookup: unable to get issuer certificate
error fullchain.cer: verification failed

```

Я воспроизвёл эту проблему сразу после успешного выпуска RSA-сертификата. Сбой проверки приводит к ненужному запросу `--force`, что может вызвать HTTP 429 / `rateLimited` / «too many certificates». В моей установке выпуск ECDSA-сертификатов был заблокирован, и HTTPS не запустился.

При наличии затронутых цепочек каждый пересбор или перезапуск контейнера может вызывать ненужное принудительное повторное выпуск RSA- и ECDSA-сертификатов, даже если они всё ещё действительны. Успешные повторные выпуски расходуют квоту Let’s Encrypt, поэтому частые пересборки или перезапуски могут быстро привести к достижению лимита частоты.

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

## Исправление

В файле `templates/web.letsencrypt.ssl.template.yml`, внутри функции `cert_exists()`, замените:

```diff
- openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer
+ openssl verify -untrusted ca.cer fullchain.cer

```

Остальную часть функции оставьте без изменений. Исправленный шаблон должен быть включён в следующую пересборку контейнера для обновления `/usr/local/bin/letsencrypt`.

**Если вы уже достигли лимита частоты, патч не сбрасывает квоту. Примените исправление и соблюдайте время `retry after` перед попытками дальнейшего выпуска.**

PR: [FIX: preserve the Let's Encrypt issuer chain in cert\_exists - Pull Request #1136 - discourse/discourse\_docker - GitHub](https://github.com/discourse/discourse_docker/pull/1136)

## Подтверждение проблемы с проверкой цепочки

Из каталога затронутого сертификата внутри контейнера (`/shared/letsencrypt/<hostname>` или `<hostname>_ecc`) сравните результаты:

```bash
openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer
openssl verify -untrusted ca.cer fullchain.cer

```

В воспроизведённом случае первая команда завершается ошибкой 2, а вторая возвращает:

```plaintext
fullchain.cer: OK

```

## Причина и валидация

Команда `openssl x509 -in ca.cer` читает только первый сертификат из пакета эмитента. В наблюдаемой цепочке YR2 это приводит к потере перекрёстно подписанного `Root YR`, необходимого для достижения `ISRG Root X1`.

Параметр `-untrusted ca.cer` предоставляет полный пакет эмитента, сохраняя доверенные якоря в системном хранилище, что сохраняет намерение [исправления 2021 года (#576)](https://github.com/discourse/discourse_docker/pull/576).

Я проверил фактические цепочки RSA и ECDSA внутри контейнера. Полная пересборка с патчем переиспользовала оба существующих сертификата: два сообщения `Skip`, обе цепочки установлены, и `nginx -t` прошёл успешно.

### Связанные отчёты

[411097](https://meta.discourse.org/t/need-help-with-dual-container-issue-with-letsencrypt-for-a-few-days-now/411097)  
[413078](https://meta.discourse.org/t/the-too-many-certificates-error-ports-80-443-open-then-close/413078)

PR: [FIX: preserve the Let's Encrypt issuer chain in cert\_exists - Pull Request #1136 - discourse/discourse\_docker - GitHub](https://github.com/discourse/discourse_docker/pull/1136)
