SSL Let's Encrypt на VPS: бесплатный HTTPS за 10 минут
HTTPS сегодня обязателен: браузеры помечают HTTP как небезопасный, а API и webhook требуют TLS. Let's Encrypt выдаёт бесплатные сертификаты на 90 дней с автоматическим продлением через certbot.
Содержание
Предварительные условия
Домен с 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 для сайтаЧастые вопросы
Срок сертификата?
90 дней, auto-renew за 30 дней до конца.
SSL на IP?
Let's Encrypt не выдаёт на голый IP — нужен домен.
Платный SSL?
Let's Encrypt достаточно; EV — для банков/enterprise.