Skip to content

SSL / TLS

SSL / TLS

HTTPS обязателен для:

  • Telegram Bot webhook (требует HTTPS)
  • Защиты персональных данных пользователей (152-ФЗ)
  • HSTS в браузере

Вариант 1: Let’s Encrypt + certbot (рекомендуется)

Установка certbot

Окно терминала
sudo apt install -y certbot

Получение сертификата (standalone, до запуска nginx)

Используется для первоначального получения сертификата, когда nginx ещё не запущен:

Окно терминала
# Остановить nginx если запущен
docker compose -f /opt/terma-grand/repo/docker-compose.prod.yml stop proxy 2>/dev/null || true
# Получить сертификат
sudo certbot certonly \
--standalone \
--preferred-challenges http \
-d termagrand.ru \
-d www.termagrand.ru \
--email admin@termagrand.ru \
--agree-tos \
--no-eff-email
# Сертификаты будут в:
# /etc/letsencrypt/live/termagrand.ru/fullchain.pem
# /etc/letsencrypt/live/termagrand.ru/privkey.pem

Получение сертификата (webroot, когда nginx уже работает)

Окно терминала
sudo certbot certonly \
--webroot \
--webroot-path /var/www/certbot \
-d termagrand.ru \
-d www.termagrand.ru \
--email admin@termagrand.ru \
--agree-tos \
--no-eff-email

Создать директорию:

Окно терминала
sudo mkdir -p /var/www/certbot

Запуск proxy с SSL

После получения сертификата — запустить proxy-контейнер:

Окно терминала
docker compose -f /opt/terma-grand/repo/docker-compose.prod.yml up -d proxy

nginx читает /etc/letsencrypt через volume-mount (настроено в docker-compose.prod.yml).

Автоматическое обновление сертификата

Окно терминала
# Проверить обновление (dry-run)
sudo certbot renew --dry-run
# Добавить в crontab
crontab -e
# Обновление 2 раза в день (стандартная рекомендация certbot)
0 12 * * * sudo certbot renew --quiet && docker compose \
-f /opt/terma-grand/repo/docker-compose.prod.yml exec proxy nginx -s reload

Вариант 2: Yandex Certificate Manager

Альтернатива Let’s Encrypt — управляемые сертификаты Yandex Cloud.

Подходит если используете:

  • Yandex Application Load Balancer (ALB)
  • Yandex API Gateway

Для схемы с VM + Docker Compose — предпочтителен Let’s Encrypt.

Через YC CLI (для ALB)

Окно терминала
# Создать managed-сертификат
yc certificate-manager certificate request \
--name terma-grand-cert \
--domains termagrand.ru,www.termagrand.ru \
--challenge dns
# Получить CNAME для DNS-валидации
yc certificate-manager certificate get terma-grand-cert \
--full | grep challenge

Проверка SSL

Окно терминала
# Проверить цепочку сертификатов
curl -vI https://termagrand.ru/api/health 2>&1 | grep -E "SSL|TLS|certificate|issuer"
# Через openssl
echo | openssl s_client -connect termagrand.ru:443 -servername termagrand.ru 2>/dev/null \
| openssl x509 -noout -dates

Следующий шаг

05 — Мониторинг