Если вы являетесь администратором Linux-сервера, то наверняка знаете, что Let’s Encrypt – это бесплатный, автоматизированный и открытый Удостоверяющий центр (УЦ) или CA, который выпускает TLS-сертификаты с проверкой домена, благодаря чему вы можете включить HTTPS на своем сайте или в веб-приложении, не тратя ни копейки.
Ранее мы рассмотрели правильную процедуру получения и установки TLS-сертификата Let’s Encrypt:
- ◀️ Настройка Jenkins за обратным прокси-сервером Nginx и SSL шифрованием Let’s Encrypt
- Настройка OpenConnect VPN Server (ocserv) на Ubuntu 16.04 / 17.10 с Let’s Encrypt
- 📧 Безопасный сервер Zimbra с SSL-сертификатом Lets Encrypt
- 🔐 Как настроить Let Encrypt SSL на Apache в Fedora
- 🔑 Как обезопасить Nginx с помощью Let’s Encrypt на CentOS 8
- Как установить Drupal 8 с LetsEncrypt SSL на Debian 9
1. Используйте последнюю версию Certbot
Рекомендуется всегда использовать последнюю версию Certbot.
При возникновении ошибки он выдает более подробные сообщения об ошибках, которые помогают быстро определить проблему.
Иногда ошибку можно устранить, просто установив последнюю версию Certbot.
Для установки последней версии можно воспользоваться программой Snap.
Затем используйте бинарник /snap/bin/certbot вместо файла по умолчанию /usr/bin/certbot.
Вы также можете создать символическую ссылку с помощью следующей команды, чтобы при вводе certbot в окне терминала автоматически использовалась версия Snap.
см. также:
📦 Как составить список установленных пакетов по размеру на Ubuntu/Debian
2. Использование плагина Webroot
Для получения сертификатов TLS можно использовать плагин webroot вместо плагина apache или nginx.
Говорят, что он более стабилен и менее подвержен ошибкам.
Поэтому вместо выполнения этой команды:
Следует использовать
Флаг -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.
Иногда в конфигурационном файле Nginx возникает ошибка.
Для проверки выполните следующую команду.
Также проверьте логи 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.
Измените владельца на www-data.
Попробуйте создать файл от имени пользователя www-data.
Если все прошло успешно, то можно снова запустить certbot для получения сертификата TLS.
Если появляется ошибка “permission denied”, то необходимо предоставить права пользователю www-data.
6. Драй ран
Если в течение какого-либо периода времени будет слишком много неудачных попыток получить TLS-сертификат Let’s Encrypt, то, скорее всего, вам будет отказано в дальнейших запросах к серверу Let’s Encrypt CA.
Чтобы этого не произошло, для тестирования можно использовать флаг –dry-run.
Драй ран работает только с подкомандой certonly, поэтому их необходимо использовать вместе.
После устранения ошибки и успешного выполнения пробного запуска можно получить сертификат TLS.
см. также:
- 🔑 Убедитесь, что ваш домен не подвержен уязвимости Letsencrypt CAA Recheck
- Скрипт Bash для автоматического обновления SSL-сертификата Letsencrypt на Tomcat
- 🔑 Как развернуть Vaultwarden