Шифрование трафика между клиентом и сервером — стандарт для веба и API. Сертификат подтверждает принадлежность ключа домену; цепочка доверия упирается в корневые CA. В статье — типы сертификатов, получение бесплатного сертификата и базовая настройка NGINX.
Типы сертификатов
Self-signed — для внутренних сервисов и тестов; браузер будет ругаться. DV (Domain Validation) — проверка владения доменом; Let's Encrypt выдаёт бесплатно. OV/EV — с проверкой организации; платные, для публичных коммерческих сайтов. Для внутренних и микросервисов чаще всего достаточно DV или внутреннего CA.
Let's Encrypt и certbot
Certbot — клиент для автоматического получения и продления сертификатов по ACME. Установка и выпуск:
# Debian/Ubuntu sudo apt update && sudo apt install certbot python3-certbot-nginx -y # Выпуск сертификата (NGINX уже настроен на домен) sudo certbot --nginx -d example.com -d www.example.com # Или webroot, если NGINX отдаёт статику из каталога sudo certbot certonly --webroot -w /var/www/html -d example.com # Продление (добавить в cron: 0 3,15 * * * certbot renew --quiet) sudo certbot renew
Сертификаты: /etc/letsencrypt/live/example.com/fullchain.pem, ключ: privkey.pem. Продление: certbot renew; в cron — например, дважды в день.
NGINX: включение TLS
Минимальный блок server с TLS и редиректом HTTP → HTTPS:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
HSTS и редирект с HTTP на HTTPS — хорошая практика для публичных сайтов. Параметры и пример конфига храните в базе знаний.
Практики применения
- Публичные домены: Let's Encrypt + certbot; добавьте
certbot renewв cron (например, дважды в день). - В NGINX задайте сертификат, ключ, TLSv1.2/1.3 и HSTS; внутренние сервисы — внутренний CA или self-signed.
Кратко: для публичных доменов — Let's Encrypt + certbot и авто-продление. В NGINX задайте сертификат, ключ и современные протоколы. Внутренние сервисы — внутренний CA или self-signed с доверием в корпоративных клиентах.