Ошибка обновления Let’s Encrypt SSL

Я легко установил SSL-сертификат в первый раз, но не могу его обновить.

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

Команда терминала

curl -X POST https://forge.laravel.com/api/servers/<serverNumber>/sites/<siteNumber>/ssl/renew?api_token=<my-token>

Ответ

Cloning into 'letsencrypt1462928414'...
nginx stop/waiting
nginx start/running, process 10734
# INFO: Using main config file /root/letsencrypt1462928414/config.sh
+ Generating account key...
+ Registering account key with letsencrypt...
Processing donniebrandt.com with alternative names: www.donniebrandt.com
 + Signing domains...
 + Creating new directory /root/letsencrypt1462928414/certs/donniebrandt.com ...
 + Generating private key...
 + Generating signing request...
 + Requesting challenge for donniebrandt.com...
 + Requesting challenge for www.donniebrandt.com...
 + Responding to challenge for donniebrandt.com...
ERROR: Challenge is invalid! (returned: invalid) (result: {"type":"http-01","status":"invalid","error":{"type":"urn:acme:error:unauthorized","detail":"Invalid response from http://donniebrandt.com/.well-known/acme-challenge/JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0 [104.18.50.184]: 526"},"uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/S6oIx5ZFyzu80fkpjoCcAgVDp7p8aLo6UGLLt7flP-g/81801388","token":"JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0","keyAuthorization":"JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0.0N_sDHF2rXqfyPHGi4ZmXDAkrmwbMJ-S_ZghYPtSN2g","validationRecord":[{"url":"http://donniebrandt.com/.well-known/acme-challenge/JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0","hostname":"donniebrandt.com","port":"80","addressesResolved":["104.18.50.184","104.18.51.184"],"addressUsed":"104.18.50.184"},{"url":"https://donniebrandt.com/.well-known/acme-challenge/JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0","hostname":"donniebrandt.com","port":"443","addressesResolved":["104.18.50.184","104.18.51.184"],"addressUsed":"104.18.50.184"}]})

Я также проверил, что каталог .well-known/acme-challenge существует, но это не меняет ошибку.


person Donnie    schedule 11.05.2016    source источник
comment
Какую именно команду вы запускаете через cron? Останавливаете ли вы службу NGINX перед тем, как запросить продление? Сертификаты действительны в течение 90 дней, а продление доступно только в течение 30 дней после истечения срока действия. Используете ли вы флаг --force-renewal для обхода этого ограничения?   -  person maiorano84    schedule 11.05.2016
comment
Опубликуйте команду, которую вы используете для обновления (и команду, используемую для выдачи сертификата)   -  person JrBenito    schedule 11.05.2016
comment
Извините за мой запоздалый ответ. @JrBenito Я добавил команду для обновления в описание вопроса, но я не знаю команду для первоначальной выдачи, так как это было автоматизировано Forge. @ maiorano84 Я не отключал NGINX и не использовал --force-renewal. Я попробую их и отпишусь о результате.   -  person Donnie    schedule 11.05.2016
comment
@Donnie Донни, я отредактировал ваш вопрос, чтобы удалить токены, которые вы не должны публиковать! Но мое редактирование требует экспертной оценки, поэтому я предлагаю вам удалить токен самостоятельно, а не ждать проверки (поместите ‹my_token› на место). Еще одно предложение — отозвать этот токен на сервере API и выпустить новый, потому что, как я видел, другие тоже могли это сделать.   -  person JrBenito    schedule 11.05.2016
comment
@ maiorano84 Я остановил NGINX и добавил флаг --force-renewal, который is unknown. Я удалил флаг и получил ту же ошибку, что и раньше.   -  person Donnie    schedule 11.05.2016


Ответы (2)


Сообщение об ошибке показывает, что ваш сайт отключен для одного из доменов:

ERROR: [...]"Invalid response from http://donniebrandt.com/[...]526"},[...]

Попробуйте получить доступ к http://donniebrandt.com, и вы получите сообщение об ошибке 526 (недействительный сертификат SSL).

Согласно от Cloudfare:

Код ответа об ошибке HTTP 526 возникает, когда CloudFlare не может успешно проверить сертификат SSL на исходном веб-сервере, а конфигурация CloudFlare SSL на веб-сайте установлена ​​​​на «Полный SSL (строгий)».

Другими словами, CDN, который вы настроили перед своим сервером, пытается подключиться к вашему серверу через HTTPS, однако ваш SSL-сертификат недействителен (возможно, истек срок действия или корневой ЦС, которому не доверяет Cloudfare CDN). Поэтому Cloudfare не будет получать контент с вашего сервера.

Я не знаком с Cloudfare, но вы можете сделать одно из следующих действий:

  • отключите временно строгий SSL в облачных тарифах, пока вы не обновите свой сертификат, и в следующий раз обновите его до истечения срока его действия, чтобы не было необходимости отключать его снова.
  • временно перенаправьте ваш DNS прямо на ваш сервер вместо CDN, обновите сертификат и снова перенаправьте его. Недостатком здесь является то, что распространение DNS может занять некоторое время, и вы потеряете преимущества CDN на длительный период в зависимости от настройки DNS.

Поскольку вы сказали, что у вас впервые работает SSL, я предполагаю, что Cloudfare доверяет LetsEncrypt (иначе это не сработает в первый раз). Однако стоит проверить это.

person JrBenito    schedule 11.05.2016

На самом деле это не исправление, но я решил проблему, воссоздав сайт в Forge и переустановив SSL.

Это больше не должно быть проблемой, так как Forge теперь лучше обрабатывает SSL.

Теперь Forge будет автоматически обновлять сертификаты LetsEncrypt каждую неделю. Вам больше не нужно вручную добавлять запланированное задание для выполнения обновления. Чтобы сгенерировать автоматически обновляемый сертификат LetsEncrypt, просто получите и активируйте новый сертификат, используя форму выше.

person Donnie    schedule 27.05.2016