SSL-сертификат нужен, чтобы сайт открывался по защищённому протоколу HTTPS. Тогда данные между посетителем и сервером шифруются, браузер показывает замок рядом с адресом, а не предупреждение «Не защищено».
Let's Encrypt выдаёт такие сертификаты бесплатно, а программа Certbot получает их, сама подключает к Nginx или Apache и потом сама продлевает. Все команды ниже мы проверили на Debian 12, на Ubuntu они работают так же.
Что нужно до начала
- Домен, у которого A-запись указывает на IP-адрес сервера. Проверить это можно командой
getent hosts example.com, она должна показать IP вашего сервера. - Сайт уже открывается по адресу
http://ваш-доменна Nginx или Apache. Как настроить Nginx, мы рассказали в отдельной статье. - Открытый порт 80, ведь Let's Encrypt проверяет домен именно через него. Если включён брандмауэр, откройте порты 80 и 443, как показано в статье о брандмауэре.
Если у домена есть AAAA-запись
Let's Encrypt сначала проверяет домен по IPv6. Если AAAA-запись ведёт на другой сервер или сайт по IPv6 не настроен, проверка провалится. Укажите в AAAA-записи IPv6-адрес этого сервера или удалите её.
1. Установите Certbot
# Устанавливаем Certbot и его модуль для Nginx
apt update && apt install -y certbot python3-certbot-nginx# Устанавливаем Certbot и его модуль для Apache
apt update && apt install -y certbot python3-certbot-apache2. Выпустите сертификат
Одна команда получает сертификат, подключает его к сайту и включает переадресацию с http:// на https://. Через -d перечислите все адреса сайта, обычно это домен с www и без.
certbot --nginx -d example.com -d www.example.com
Сертификат выпущен и подключён к Nginx
certbot --apache -d example.com -d www.example.com
Сертификат выпущен и подключён к Apache
При первом запуске Certbot задаст несколько вопросов:
- Почта – на неё приходят важные уведомления об аккаунте.
- Условия Let's Encrypt – напишите
Y, чтобы принять их. - Рассылка EFF – по желанию, можно ответить
N.
Если в конце написано Congratulations! You have successfully enabled HTTPS, всё готово. Откройте сайт по адресу https://ваш-домен, рядом с адресом появится замок.
Certbot сам дописал нужные строки в настройки сайта, они помечены комментарием # managed by Certbot. В Nginx это файл сайта в /etc/nginx/sites-available.
В Apache рядом с вашим файлом появится новый с окончанием -le-ssl.conf.
3. Проверьте сертификат
# Показываем все сертификаты на сервере
certbot certificates
Сертификат действует ещё 89 дней
В строке Expiry Date видна дата окончания.
В скобках VALID указано, сколько дней сертификат ещё будет действовать.
Ниже указаны пути к файлам сертификата и ключа, если они понадобятся для других программ.
4. Убедитесь, что продление работает
Сертификаты Let's Encrypt выдаются на короткий срок. Сейчас это 90 дней, а к 2028 году Let's Encrypt постепенно сократит срок до 45 дней. Продлевать вручную ничего не нужно. Certbot дважды в день проверяет сертификаты и сам обновляет те, у которых срок подходит к концу.
Проверьте, что продление сработает, пробным запуском. Он ничего не меняет на сервере.
# Пробное продление всех сертификатов
certbot renew --dry-run
Пробное продление прошло успешно
Если в конце написано Congratulations, all simulated renewals succeeded, сертификат будет продлеваться сам.
Несколько доменов на одном сервере
Для каждого сайта запустите Certbot отдельно, указав его домены. Чтобы добавить новый адрес к уже выпущенному сертификату, перечислите все старые адреса и новый, добавив ключ --expand.
# Добавляем поддомен shop к сертификату example.com
certbot --nginx --expand -d example.com -d www.example.com -d shop.example.comЛимиты Let's Encrypt
Один и тот же набор доменов можно выпустить не больше 5 раз за 7 дней.
Неудачных проверок одного домена допускается не больше 5 в час.
Поэтому если что-то не получается, сначала найдите причину в разделе ниже и только потом запускайте Certbot снова.
Получить сертификат без настройки сервера
Если вы хотите подключить сертификат вручную или он нужен другой программе, используйте certonly. Certbot только получит сертификат и ничего не изменит в настройках.
# Certbot сам проходит проверку через работающий веб-сервер.
# Для Apache замените --nginx на --apache
certbot certonly --nginx -d example.com# Подходит для любого веб-сервера. Укажите в -w папку,
# из которой сайт отдаёт файлы
certbot certonly --webroot -w /var/www/example.com -d example.com# Certbot сам ненадолго займёт порт 80. Если на нём работает
# веб-сервер, сначала остановите его
certbot certonly --standalone -d example.comГотовые файлы лежат в папке /etc/letsencrypt/live/example.com/. Файл fullchain.pem – это сертификат.
Файл privkey.pem – это закрытый ключ, его никому нельзя передавать.
Частые ошибки
Timeout during connect (likely firewall problem)
Let's Encrypt не смог подключиться к серверу по порту 80. Чаще всего его закрывает брандмауэр. Откройте порты 80 и 443 и запустите Certbot снова. Проверить, что веб-сервер вообще слушает порт 80, можно командой ss -tlnp | grep ':80 '.
DNS problem: NXDOMAIN looking up A
У домена нет A-записи. Добавьте её у регистратора домена, указав IP-адрес сервера. Новая запись начинает работать не сразу, иногда приходится немного подождать. Проверьте результат командой getent hosts example.com и после этого запускайте Certbot.
unauthorized: Invalid response … 404
Let's Encrypt открыл домен, но не нашёл проверочный файл. Обычно домен указывает на другой сервер, например A-запись осталась от старого хостинга, или AAAA-запись ведёт не туда. Сравните IP в DNS с IP вашего сервера. Если вы используете --webroot, проверьте, что в -w указана та папка, из которой сайт отдаёт файлы.
Could not automatically find a matching server block
Сертификат получен, но Certbot не нашёл в настройках Nginx сайт с этим доменом. Впишите домен в директиву server_name в настройках сайта, проверьте их командой nginx -t, перезагрузите Nginx и подключите уже выпущенный сертификат командой certbot install --cert-name example.com.
too many certificates или too many failed authorizations
Сработали лимиты Let's Encrypt, и нужно подождать, пока они сбросятся.
Лимит на неудачные проверки действует час.
Лимит на повторный выпуск действует неделю.
Чтобы спокойно отладить настройки, запускайте Certbot с ключом --dry-run, пробные запуски на рабочие лимиты не влияют.
Сертификат истёк и не продлился сам
Продлите его вручную командой certbot renew и посмотрите, не появились ли ошибки. Чаще всего это одна из проблем выше, например закрытый порт 80. Проверить, что таймер продления включён, можно командой systemctl list-timers | grep certbot.
Подробности последних запусков записаны в файле /var/log/letsencrypt/letsencrypt.log.
Можно ли получить сертификат на все поддомены сразу?
Да, это wildcard-сертификат вида *.example.com. Но для него Let's Encrypt проверяет домен через DNS-запись, а не через сайт, поэтому способы из этой статьи не подойдут. Обычно проще выпустить сертификат на нужные поддомены через несколько ключей -d.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Сайт хостинга: https://f3cloud.com