MAATRIX / Блог / SSL Let's Encrypt на VPS: бесплатный HTTPS за 10 минут

SSL Let's Encrypt на VPS: бесплатный HTTPS за 10 минут

SSL Let's Encrypt на VPS: certbot, автообновление и HTTPS
Блог MAATRIX · 2026-07-07

HTTPS сегодня обязателен: браузеры помечают HTTP как небезопасный, а API и webhook требуют TLS. Let's Encrypt выдаёт бесплатные сертификаты на 90 дней с автоматическим продлением через certbot.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Предварительные условия

Домен с A-записью на IP VPS. Let's Encrypt не выдаёт сертификат на голый IP.

Порт 80 открыт снаружи — HTTP-01 challenge certbot проверяет файл по http://domain/.well-known/acme-challenge/.

nginx (или другой веб-сервер) уже установлен и отвечает на домен — certbot --nginx встроит SSL в конфиг.

Staging CA Let's Encrypt (acme-staging) — тестируйте automation без rate limits production CA; сертификат staging браузер не доверяет — это нормально.

HSTS preload list — только для mature domains; ошибка strand users on broken HTTPS months.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

VPS для сайта

Установка certbot

apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com

Certbot спросит email для уведомлений об истечении, согласие с ToS и redirect HTTP→HTTPS — для production redirect рекомендуем.

Сертификаты: /etc/letsencrypt/live/example.com/fullchain.pem и privkey.pem — не копируйте вручную, certbot обновляет их сам.

Несколько доменов на одном cert экономят reload nginx — certbot -d a.com -d b.com одним SAN сертификатом.

Dual cert RSA + ECDSA — certbot поддерживает два сертификата для старых клиентов и быстрого ECDSA handshake на modern browsers.

Ручной SSL block

При ручной настройке добавьте server { listen 443 ssl http2; ssl_certificate ...; ssl_certificate_key ...; }.

ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; — современный безопасный профиль.

HSTS (Strict-Transport-Security) включайте только когда уверены, что HTTPS стабилен — иначе заблокируете пользователей на HTTP.

После renew проверяйте nginx -t — редко certbot hook ломает symlink paths при custom layouts.

Certificate Transparency logs публичны — internal hostname не используйте в LE cert если не хотите светить subdomain.

Автообновление

certbot renew --dry-run — проверка. Systemd timer certbot.timer или cron 0 3 * * * certbot renew --quiet уже ставится пакетом.

После renew nginx reload: hook --deploy-hook "systemctl reload nginx".

Сертификат живёт 90 дней, renew запускается за 30 дней до конца — простой из-за истечения маловероятен при работающем cron.

OCSP stapling снижает latency первого TLS handshake — certbot nginx plugin часто включает автоматически на современных конфигах.

Renewal hooks для reload не только nginx — haproxy, caddy, mail server smtpd TLS certs тоже через deploy-hook.

Wildcard DNS-01

Wildcard *.example.com требует DNS-01 challenge: certbot certonly --manual --preferred-challenges dns.

Добавьте TXT _acme-challenge в DNS провайдера. Автоматизация — через API Cloudflare/Route53 и certbot-dns-* плагины.

Wildcard удобен для множества поддоменов без отдельного cert на каждый.

Мониторьте expiry внешним скриптом: openssl s_client -connect example.com:443 | openssl x509 -noout -dates — backup alert если certbot timer сломался.

Fail2ban filter для repeated TLS handshake errors — опционально против SSL scanners noise.

Webhook и API

Telegram, Stripe, GitHub webhooks требуют HTTPS с валидным cert. Self-signed не подойдёт — только Let's Encrypt или коммерческий CA.

Проверьте цепочку: ssllabs.com/ssltest — оценка A/A+ подтверждает корректную настройку intermediate certificates.

Для internal-only сервисов без публичного HTTP используйте DNS-01 или self-signed + private CA — LE HTTP-01 не применим.

Проблемы

  • Connection refused — firewall блокирует 80.
  • NXDOMAIN — DNS ещё не распространился.
  • Too many requests — лимит LE, подождите неделю.

Логи certbot: /var/log/letsencrypt/letsencrypt.log — подробная причина отказа validation.

Если certbot сообщает, что домен недоступен, проверьте с внешней машины curl -I http://domain/.well-known/acme-challenge/test — так исключаете локальный firewall.

Переезд на новый VPS: получите cert на новом IP до DNS cutover через DNS-01 или временный HTTP на старом и новом параллельно.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

VPS для сайта

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Срок сертификата?

90 дней, auto-renew за 30 дней до конца.

SSL на IP?

Let's Encrypt не выдаёт на голый IP — нужен домен.

Платный SSL?

Let's Encrypt достаточно; EV — для банков/enterprise.