Загрузка...

Блог

SSL/TLS сертификаты: базовая настройка для сисадмина

SSL/TLS сертификаты: базовая настройка для сисадмина

Шифрование трафика между клиентом и сервером — стандарт для веба и 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 с доверием в корпоративных клиентах.