Как получить и настроить SSL/TLS сертификат для HTTPS?

«Как получить и настроить SSL/TLS сертификат для HTTPS?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Получение и настройка SSL-сертификата — стандартная задача. Я предпочитаю автоматизировать этот процесс.

1. Автоматизированный способ (Let's Encrypt): Для большинства проектов использую Certbot с плагином webroot или nginx. Это бесплатно и автоматически обновляется.

  • Установка Certbot (на Ubuntu):

    sudo apt update
    sudo apt install certbot python3-certbot-nginx
  • Получение сертификата (с автоматической настройкой Nginx):

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

    Certbot автоматически изменит конфиг Nginx, добавив директивы ssl_certificate и ssl_certificate_key.

  • Автообновление: Let's Encrypt выдает сертификаты на 90 дней. Certbot добавляет cron-задачу или systemd timer для автоматического обновления. Проверить можно вручную: sudo certbot renew --dry-run

2. Ручной способ (например, для внутренних доменов или платных CA):

  • Генерация приватного ключа и CSR (Certificate Signing Request):
    openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr
  • Отправляете example.csr в Центр Сертификации (ЦС), проходите validation (по email, DNS или HTTP).
  • Получаете от ЦС цепочку сертификатов (обычно файлы .crt).

3. Настройка в Nginx:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    # Рекомендуемые настройки безопасности
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
    ssl_prefer_server_ciphers off;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # Обязательный редирект с HTTP на HTTPS
    # ...
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

4. Дополнительные практики:

  • Использование HSTS (HTTP Strict Transport Security) заголовка.
  • Регулярное сканирование конфигурации с помощью инструментов вроде SSL Labs Test.
  • Для Kubernetes: использование cert-manager для автоматического получения и ротации сертификатов для Ingress-ресурсов.