Блог

Уроки, руководства и новости продукта.

Безопасность и бэкапы

Бесплатные сертификаты HTTPS от Let's Encrypt

2 ноября 2026 4 мин. чтения
Поделиться записью

Let's Encrypt — центр сертификации, выдающий бесплатные сертификаты HTTPS для вашего домена. На VPS сертификат можно получить несколькими командами через Certbot или вообще без команд через Caddy, и оба продлевают его сами. Условий два: домен должен указывать на IP-адрес вашего сервера, а порты 80 и 443 должны быть открыты снаружи.

Зачем нужен HTTPS?

HTTPS шифрует трафик между браузером и сервером. Посторонние в сети не смогут прочитать пароль в форме входа или данные заказа. На сайтах без HTTPS браузеры могут показывать предупреждение «небезопасно». Сертификат Let's Encrypt бесплатен, так что причин обходиться без HTTPS не осталось.

Прежде чем начать

  • A-запись домена должна указывать на IP-адрес вашего сервера. Чтобы проверить, выполните dig +short example.com. В выводе должен быть IP-адрес вашего сервера.
  • Порты 80 и 443 должны быть открыты, потому что проверка идёт по порту 80 (HTTP-01). Если вы используете ufw, выполните sudo ufw allow 80/tcp и sudo ufw allow 443/tcp. Если у сервера есть отдельный брандмауэр в панели, проверьте правила и там.
  • Если у домена есть запись AAAA (IPv6), она тоже должна указывать на этот сервер. Если нет, удалите запись.
  • Ваш веб-сервер должен работать и знать этот домен.

Установка и проверка через Certbot на Nginx или Apache

Официальная инструкция Certbot рекомендует пакет snap. Убедитесь, что на сервере установлен snapd (в Ubuntu он обычно есть), и удалите старый Certbot, установленный через apt.

  1. Установите Certbot: sudo snap install --classic certbot
  2. Сделайте команду доступной везде: sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
  3. Получите сертификат и установите его в веб-сервер. Для Nginx выполните sudo certbot --nginx, для Apache — sudo certbot --apache.
  4. Ответьте на вопросы: ваш адрес электронной почты, для каких доменов нужен сертификат и нужно ли перенаправлять HTTP на HTTPS.
  5. Проверьте продление: sudo certbot renew --dry-run

Если вам нужно только получить сертификат, а настроить всё остальное самостоятельно, выполните sudo certbot certonly --nginx. Пакет Certbot сам добавляет запланированное задание (cron или таймер systemd), его видно в выводе systemctl list-timers. sudo certbot certificates выводит ваши сертификаты и сроки их действия. Certbot продлевает сертификат, когда срок его действия подходит к концу, и вам ничего делать не нужно. Но продление всё же может однажды не сработать (например, из-за правила брандмауэра), поэтому время от времени запускайте --dry-run.

Чтобы проверить сертификат, сначала посмотрите на значок замка в адресной строке браузера. Чтобы увидеть срок действия командой, выполните:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

Строка notAfter в выводе — срок действия сертификата. Если вы не используете перенаправление, которое добавляет Certbot, настройте перенаправление HTTP на HTTPS сами. В Nginx добавьте строку return 301 https://$host$request_uri; в блок server, слушающий порт 80.

С Caddy и без команд

Если вы используете Caddy, ничего дополнительно ставить не нужно. Для домена из своей конфигурации Caddy сам получает сертификат от Let's Encrypt или ZeroSSL, продлевает его и перенаправляет HTTP на HTTPS. По официальной документации, A- и AAAA-записи домена должны указывать на сервер, порты 80 и 443 должны быть доступны снаружи, а папка данных Caddy должна быть постоянной и доступной для записи. Если вы запускаете Caddy в Docker, смонтируйте эту папку на том. Иначе при удалении контейнера сертификаты пропадут, а повторный запрос может упереться в лимит.

Wildcard-сертификаты

Wildcard-сертификат (*.example.com) покрывает все поддомены одним сертификатом, и получить его можно только через проверку DNS-01. Эта проверка не использует порт 80. Она просит вас добавить TXT-запись в DNS домена. Для этого у вашего DNS-провайдера должен быть API, а ключ API вы храните на сервере. В документации Let's Encrypt хранение таких ключей на веб-сервере названо рискованным. Если wildcard не нужен, проще получать сертификаты для отдельных доменов через HTTP-01, при этом хранить ключ DNS не нужно.

Типичные ошибки

СимптомВероятная причинаРешение
Проверка не проходит, домен не найденA-запись указывает на неверный IP или ещё не распространиласьПроверьте IP командой dig +short example.com и подождите
Тайм-аутПорт 80 закрытОткройте 80 в ufw и в брандмауэре панели, если он у вас есть
Проверка то проходит, то нетЗапись AAAA указывает на другой серверИсправьте или удалите запись AAAA
Ошибка превышения лимитаСлишком много попытокДля тестов используйте --dry-run и смотрите лимиты на официальной странице
Продление не выполняетсяНет запланированного задания, или веб-сервер блокирует порт 80sudo certbot renew --dry-run покажет ошибку

В сообщении об ошибке обычно сказано, какая проверка не прошла и к какому адресу на вашем сервере пытался обратиться Let's Encrypt. Читайте сообщение как есть. Ответ часто лежит прямо там.

Согласно официальной странице Let's Encrypt, действует лимит 5 сертификатов в неделю для одного и того же набора доменных имён и 5 неудачных проверок в час для одного и того же доменного имени. Поэтому, пока экспериментируете, используйте --dry-run. Он пробует продление в тестовой среде и не тратит ваш настоящий лимит.

На готовых приложениях Seturack

Готовые приложения (WordPress, Nextcloud и другие) открываются по HTTPS на адресе sslip.io, построенном из вашего IP-адреса, поэтому доменное имя не нужно. Когда вы подключаете собственный домен, Caddy получает сертификат заново, и ничего дополнительно ставить не нужно. Шаги, как сообщить о домене Caddy и приложению, описаны в этой справочной статье.

Комментарии0

Комментариев пока нет

Поделитесь своим мнением первым.

Присоединяйтесь к обсуждению

Пожалуйста, войдите или зарегистрируйтесь, чтобы оставить комментарий.

Не пропускайте новые записи

Получайте наши свежие инструкции, руководства и новости продукта на почту.

Вы подписались на нашу рассылку.