EvolCode
треки/Сервер и продакшн·07 / 08
5 мин чтения

HTTPS и Let’s Encrypt — бесплатный сертификат

Сайт без HTTPS в 2026 — это «не защищён» в адресной строке, минус позиции в Google, и часть API не работает (geolocation, push, clipboard). Хорошо что HTTPS теперь бесплатно через Let’s Encrypt и ставится одной командой.

Зачем HTTPS

HTTP — открытый текст, любой между тобой и сервером может прочитать (включая wifi-роутер в кафе). HTTPS — шифрование. Для пользовательских паролей и платежей это критично. Плюс: Google ранжирует HTTPS-сайты выше. Плюс: многие новые browser API (геолокация, нотификации, clipboard, service worker) работают ТОЛЬКО по HTTPS. Без него современный сайт — ущербный.

Let’s Encrypt — кто это

Раньше SSL-сертификаты стоили $50-500/год. Let’s Encrypt — некоммерческий центр сертификации который выдаёт сертификаты БЕСПЛАТНО, автоматически, на 90 дней (потом авто-продление). Поддерживается всеми браузерами. Сегодня 80% HTTPS в интернете — Let’s Encrypt.

Certbot — стандартный клиент

Certbot — программа которая разговаривает с Let’s Encrypt и ставит сертификат на твой nginx/apache. Установка на Ubuntu:

$ sudo apt install certbot python3-certbot-nginx

Получить и поставить сертификат:

$ sudo certbot --nginx -d example.com -d www.example.com

Certbot сам редактирует nginx-конфиг, добавляет редирект с http на https, и настраивает auto-renewal через systemd-таймер. Ставится за 30 секунд.

Авто-продление

Сертификаты Let’s Encrypt живут 90 дней. Certbot ставит systemd-таймер который пытается продлить за 30 дней до истечения, два раза в день. На практике — раз поставил, забыл. Проверить что таймер живёт:

$ sudo systemctl list-timers | grep certbot

Тестовый прогон:

$ sudo certbot renew --dry-run

Если что-то сломалось — увидишь.

Если домен на Cloudflare

Cloudflare даёт свой бесплатный SSL «прокси-сертификат» автоматически — ничего ставить не надо. Включаешь «Full» режим (или Full Strict — лучше) в SSL/TLS настройках. Между Cloudflare и пользователем — Cloudflare-сертификат. Между Cloudflare и твоим сервером — нужен ещё один сертификат на сервере (Let’s Encrypt подойдёт). Без него пакеты будут идти по HTTP в Cloudflare → не Strict.

примерbash
# === ПРЕДПОСЫЛКИ ===
# 1) DNS уже настроен: example.com и www.example.com → IP сервера
# 2) nginx работает на порту 80, проксирует на твой Next.js


# === УСТАНОВКА CERTBOT ===
sudo apt update
sudo apt install -y certbot python3-certbot-nginx


# === ПОЛУЧИТЬ И ПОСТАВИТЬ СЕРТИФИКАТ ===
sudo certbot --nginx -d example.com -d www.example.com

# Certbot спросит:
# 1) email — для уведомлений об истечении (важно)
# 2) согласие с TOS — A
# 3) хочешь ли email-рассылки от EFF — N
# 4) редирект http → https — REDIRECT (рекомендуется)

# После: certbot отредактирует nginx-конфиг автоматически
# Добавит:
#   listen 443 ssl;
#   ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
#   ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# И редирект 80 → 443.


# === ПРОВЕРКА ===
curl -I https://example.com
# HTTP/2 200
# Cертификат валиден

# В браузере открой https://example.com — увидишь замочек ✓


# === ПРОДЛЕНИЕ (авто) ===
# Certbot ставит systemd-таймер. Проверь:
sudo systemctl list-timers | grep certbot
# certbot.timer → запускается раз в 12 часов

# Тестовый прогон:
sudo certbot renew --dry-run
# Если без ошибок — настройка ОК.


# === ЕСЛИ ЧТО-ТО СЛОМАЛОСЬ ===

# Посмотреть существующие сертификаты:
sudo certbot certificates

# Удалить:
sudo certbot delete --cert-name example.com

# Поставить заново:
sudo certbot --nginx -d example.com -d www.example.com

# Логи:
sudo journalctl -u certbot.service
sudo cat /var/log/letsencrypt/letsencrypt.log


# === ВРУЧНУЮ ОБНОВИТЬ NGINX-КОНФИГ ===
# Если certbot не сам редактирует (--certonly режим):
sudo certbot certonly --webroot -w /var/www/site -d example.com

# Потом в /etc/nginx/sites-available/site:
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        # ... остальные proxy_set_header
    }
}

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;       # редирект на HTTPS
}

sudo nginx -t && sudo systemctl reload nginx

От HTTP-сайта до HTTPS за 3 команды

главное
  • 01HTTPS обязателен в 2026 — без него «не защищён», ниже SEO, не работают часть API
  • 02Let’s Encrypt — бесплатные SSL-сертификаты для всех, на 90 дней с авто-продлением
  • 03certbot --nginx -d example.com -d www.example.com — одна команда и готово
  • 04Certbot сам правит nginx-конфиг и ставит редирект http → https
  • 05Авто-продление работает через systemd-таймер, проверка: certbot renew --dry-run
  • 06Cloudflare даёт SSL автоматически — но на сервере всё равно нужен Let’s Encrypt для Full Strict
  • 07curl -I https://example.com — быстрая проверка что HTTPS работает
проверь себя
01Почему HTTPS обязателен в 2026?
02Как часто Let’s Encrypt обновляет сертификат?
03curl -I https://example.com отвечает «certificate expired». Что делать?
следующий урок: Безопасность — OWASP top 5 для вайбкодеров