← Назад к вопросам

Как получить сертификат TLS?

1.0 Junior🔥 211 комментариев
#Безопасность#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Получение TLS/SSL сертификата: полное руководство

Получение TLS (Transport Layer Security) сертификата — критически важный процесс для обеспечения безопасности веб-сайтов, API и сетевых сервисов. Я разделю этот процесс на ключевые этапы, типы сертификатов и практические примеры автоматизации, что особенно важно для DevOps-инженеров.

Типы TLS сертификатов и выбор

Прежде чем начать, определите тип сертификата:

  • DV (Domain Validation) — проверка только владения доменом. Выдаётся быстро (минуты), идеален для базового шифрования.
  • OV (Organization Validation) — дополнительная проверка организации. Требует дней, повышает доверие.
  • EV (Extended Validation) — максимальная проверка, включает юридическую верификацию. Самый высокий уровень доверия (зелёная строка в браузере).
  • Wildcard — защищает домен и все его поддомены (например, *.example.com).
  • Multi-Domain/SAN — защищает несколько разных доменов одним сертификатом.

Для DevOps наиболее распространены DV и Wildcard, так как они легко автоматизируются.

Основные шаги получения сертификата

Процесс стандартизирован и состоит из следующих этапов:

  1. Генерация пары ключей и CSR (Certificate Signing Request)
    Сначала на сервере генерируется приватный ключ и CSR, который содержит информацию о домене и организации.

```bash
# Генерация приватного ключа RSA (рекомендуется 2048 или 4096 бит)
openssl genrsa -out example.com.key 2048

# Генерация CSR на основе ключа
openssl req -new -key example.com.key -out example.com.csr
```
    При выполнении второй команды вас спросят о **Common Name (CN)** — это ваш домен (например, `example.com`).

  1. Выбор Центра Сертификации (CA)
    CSR отправляется в доверенный **Центр Сертификации** для подписи. Популярные варианты:
    *   **Let's Encrypt** — бесплатный, автоматизированный, идеален для DevOps. Срок действия — 90 дней.
    *   **DigiCert, Sectigo, GlobalSign** — платные коммерческие CA с поддержкой OV/EV и более длительным сроком (1-2 года).

  1. Прохождение проверки (Validation)
    CA должен убедиться, что вы владеете доменом. Методы:
    *   **HTTP/HTTPS Challenge** — размещение специального файла с токеном по пути `/.well-known/acme-challenge/` на вашем веб-сервере.
    *   **DNS Challenge** — создание TXT-записи в DNS. Этот метод часто предпочтителен для автоматизации и получения wildcard-сертификатов.
    *   **Email Challenge** — подтверждение по email администратора домена (менее автоматизируемо).

  1. Получение и установка сертификата
    После успешной проверки CA выдаёт подписанный сертификат (обычно файл `.crt` или `.pem`) и цепочку доверия (chain). Вместе с приватным ключом они устанавливаются на веб-сервер (Nginx, Apache, HAProxy и т.д.).

Автоматизация с помощью ACME-клиентов (Let's Encrypt)

Для DevOps-практики автоматическое получение и обновление сертификатов — стандарт. Протокол ACME (используемый Let's Encrypt) создан именно для этого.

Certbot — самый популярный ACME-клиент.

# Установка Certbot на Ubuntu/Debian
sudo apt update
sudo apt install certbot

# Получение сертификата для домена с автоматической настройкой Nginx
sudo certbot --nginx -d example.com -d www.example.com

# Получение wildcard сертификата через DNS-проверку (для Cloudflare)
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /path/to/cloudflare.ini \
  -d "*.example.com" -d example.com \
  --preferred-challenges dns-01

Критически важный момент: Настройте автоматическое обновление! Сертификаты Let's Encrypt действуют 90 дней.

# Проверка автоматического обновления в systemd timer (стандартно устанавливается с Certbot)
systemctl list-timers | grep certbot

# Тестовый запуск обновления (без реальной замены)
sudo certbot renew --dry-run

Обычно достаточно добавить задание в cron:

# Пример cron-задания, запускающего обновление раз в день
0 12 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Практические рекомендации для DevOps

  • Безопасное хранение ключа: Приватный ключ (*.key) должен быть защищён (права 600), никогда не коммититься в Git. Используйте секреты в Hashicorp Vault, AWS Secrets Manager, Kubernetes Secrets.
  • Цепочка доверия: Убедитесь, что вы установили полную цепочку (intermediate certificates), иначе у некоторых клиентов будут ошибки.
  • Мониторинг: Отслеживайте сроки действия сертификатов с помощью Prometheus (экспортер ssl-exporter), Nagios или облачных мониторов (AWS Certificate Manager уведомляет об истечении).
  • Внутренняя инфраструктура: Для внутренних сервисов (dev/staging) используйте собственный Private CA (например, на базе cfssl или EasyRSA) или внутренний Let's Encrypt-подобный сервер (Boulder, smallstep).
  • Контейнеры и оркестраторы: В Kubernetes используйте cert-manager — оператор для автоматического управления сертификатами через Custom Resource Definitions (CRDs).
    # Пример Issuer для Let's Encrypt в cert-manager
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: admin@example.com
        privateKeySecretRef:
          name: letsencrypt-prod-key
        solvers:
        - http01:
            ingress:
              class: nginx
    

Итог: Современный DevOps-подход к TLS предполагает полную автоматизацию жизненного цикла сертификатов — от получения через ACME-протокол (чаще всего с Let's Encrypt) до установки, обновления по расписанию и мониторинга с помощью специализированных инструментов. Ручная работа с сертификатами должна быть исключением для особых случаев (OV/EV).

Как получить сертификат TLS? | PrepBro