🔐 Как исправить распространенные ошибки Let’s Encrypt/Certbot |

🔐 Как исправить распространенные ошибки Let’s Encrypt/Certbot

Мануал

Если вы являетесь администратором Linux-сервера, то наверняка знаете, что Let’s Encrypt – это бесплатный, автоматизированный и открытый Удостоверяющий центр (УЦ) или CA, который выпускает TLS-сертификаты с проверкой домена, благодаря чему вы можете включить HTTPS на своем сайте или в веб-приложении, не тратя ни копейки.

Ранее мы рассмотрели правильную процедуру получения и установки TLS-сертификата Let’s Encrypt:

1. Используйте последнюю версию Certbot

Рекомендуется всегда использовать последнюю версию Certbot.

При возникновении ошибки он выдает более подробные сообщения об ошибках, которые помогают быстро определить проблему.

Иногда ошибку можно устранить, просто установив последнюю версию Certbot.

Для установки последней версии можно воспользоваться программой Snap.

sudo snap install certbot --classic

Затем используйте бинарник  /snap/bin/certbot вместо файла  по умолчанию /usr/bin/certbot.

sudo /snap/bin/certbot --webroot --agree-tos --redirect --hsts --staple-ocsp -d example.com

Вы также можете создать символическую ссылку с помощью следующей команды, чтобы при вводе certbot в окне терминала автоматически использовалась версия Snap.

sudo /snap/bin/certbot --webroot --agree-tos --redirect --hsts --staple-ocsp -d example.com

см. также:

📦 Как составить список установленных пакетов по размеру на Ubuntu/Debian

2. Использование плагина Webroot

Для получения сертификатов TLS можно использовать плагин webroot вместо плагина apache или nginx.

Говорят, что он более стабилен и менее подвержен ошибкам.

Поэтому вместо выполнения этой команды:

sudo /snap/bin/certbot --nginx --agree-tos --redirect --hsts --staple-ocsp -d example.com

Следует использовать

sudo /snap/bin/certbot --webroot --agree-tos --redirect --hsts --staple-ocsp -d example.com -w /var/www/html

Флаг -w задает корневой каталог webroot вашего сайта/web-приложения.

В приведенном выше примере я использую каталог /var/www/html/.

Точное расположение можно найти в файле конфигурации вашего веб-сервера.

В Apache вы должны найти строку следующего вида:

DocumentRoot "/var/www/nextcloud"

В Nginx вы должны найти строку, подобную этой:

root /var/www/nextcloud/;

3. Тайм-аут при подключении (вероятно, проблема с брандмауэром)

Некоторые пользователи могут столкнуться с такой ошибкой:

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: mail.example.com
   Type:   connection
   Detail: Fetching
   http://mail.example.com/.well-known/acme-challenge/8aNsZkYzpbFXyWUAECaJEj1eBsVhPOokDYeNTgw4nq8:
   Timeout during connect (likely firewall problem)

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address. Additionally, please check that
   your computer has a publicly routable IP address and that no
   firewalls are preventing the server from communicating with the
   client. If you're using the webroot plugin, you should also verify
   that you are serving files from the webroot path you provided.
Can't open /etc/letsencrypt/renewal/mail.example.com.conf: No such file or directory.

Это может быть:

  • Ваша DNS-запись A неверна. Вы указали неправильный IP-адрес для mail.example.com? Пожалуйста, не указывайте частный IP-адрес в записи A DNS. Вы должны использовать публичный IP-адрес.
  • Ваша DNS-запись еще не распространилась. Зайдите на сайт https://dnsmap.io и проверьте, распространилась ли она.
  • Вы не открыли TCP-порты 80 и 443 в брандмауэре. Вызов Certbot HTTP-01 требует доступа к определенной веб-странице, поэтому необходимо открыть эти два порта. Если вы используете UFW, прочтите это руководство: Как использовать брандмауэр UFW в Debian, Ubuntu, Linux Mint

4. Конфиги Nginx не вступают в силу.

Некоторые пользователи могут столкнуться с этой ошибкой:

Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.

Это означает, что файл виртуального хоста не загрузился в Nginx.

Необходимо перезапустить Nginx.

sudo systemctl restart nginx

Иногда в конфигурационном файле Nginx возникает ошибка.

Для проверки выполните следующую команду.

sudo nginx -t

Также проверьте логи Nginx.

sudo journalctl -eu nginx

Однажды я столкнулся с описанной выше ошибкой, поскольку забыл добавить директиву server_name в конфигурационный файл Nginx, поэтому Nginx не знает, какой конфигурационный файл использовать для запроса Certbot.

5. 404 not found

Пример сообщения об ошибке:

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: onlyoffice.itsecforu.ru
   Type:   unauthorized
   Detail: 2606:4700:20::681a:c47: Invalid response from
   https://onlyoffice.itsecforu.ru/.well-known/acme-challenge/piqJOZM3CYsCGAmT-ZdfKI2XrvteQQEyKgtIHM6DNo4:
   526

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.

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

Например, я столкнулся с этой ошибкой при попытке получить сертификат TLS для онлайнового офисного пакета OnlyOffice.

В логе ошибок веб-сервера Nginx есть следующие строки.

022/12/01 04:53:23 [error] 26124#26124: *14 open() "/var/www/onlyoffice/documentserver/letsencrypt/.well-known/acme-challenge/uhV7Py-ruxoDSkY_BcZwiifQ1L_Pli6pMK0wvInNiLA" failed (2: No such file or directory), client: 127.0.0.1, server: webmail.sk8deal.com, request: "GET /.well-known/acme-challenge/uhV7Py-ruxoDSkY_BcZwiifQ1L_Pli6pMK0wvInNiLA HTTP/1.1", host: "onlyoffice.itsecforu.ru", referrer: "http://onlyoffice.itsecforu.ru/.well-known/acme-challenge/uhV7Py-ruxoDSkY_BcZwiifQ1L_Pli6pMK0wvInNiLA"

В итоге нам необходимо создать каталог для протокола Let’s Encrypt ACME.

sudo mkdir -p /var/www/onlyoffice/documentserver/letsencrypt/.well-known/acme-challenge/

Измените владельца на www-data.

sudo chown www-data:www-data /var/www/onlyoffice/documentserver/letsencrypt/ -R

Попробуйте создать файл от имени пользователя www-data.

sudo -u www-data touch /var/www/onlyoffice/documentserver/letsencrypt/.well-known/acme-challenge/uhV7Py-ruxoDSkY_BcZwiifQ1L_Pli6pMK0wvInNiLA

Если все прошло успешно, то можно снова запустить certbot для получения сертификата TLS.

Если появляется ошибка “permission denied”, то необходимо предоставить права пользователю www-data.

sudo apt install acl
sudo setfacl -R -m u:www-data:rxx /var/www/onlyoffice/

6. Драй ран

Если в течение какого-либо периода времени будет слишком много неудачных попыток получить TLS-сертификат Let’s Encrypt, то, скорее всего, вам будет отказано в дальнейших запросах к серверу Let’s Encrypt CA.

Чтобы этого не произошло, для тестирования можно использовать флаг –dry-run.

sudo /snap/bin/certbot certonly --dry-run --webroot --agree-tos --redirect --hsts --staple-ocsp -d example.com -w /var/www/html

Драй ран работает только с подкомандой certonly, поэтому их необходимо использовать вместе.

После устранения ошибки и успешного выполнения пробного запуска можно получить сертификат TLS.

sudo /snap/bin/certbot --webroot --agree-tos --redirect --hsts --staple-ocsp -d example.com -w /var/www/html

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий