Полное руководство по SSL-сертификатам

Содержание

Что такое SSL/TLS?

SSL (Secure Sockets Layer) и его преемник TLS (Transport Layer Security) — это криптографические протоколы, обеспечивающие безопасность связи в интернете. Когда вы посещаете HTTPS-сайт, TLS шифрует соединение между вашим браузером и сервером, предотвращая перехват и подмену данных.

Как это работает

TLS-рукопожатие устанавливает безопасное соединение в следующие этапы:

  1. Client hello — браузер отправляет поддерживаемые версии TLS и наборы шифров
  2. Server hello — сервер выбирает версию/шифр и отправляет свой сертификат
  3. Проверка сертификата — браузер проверяет сертификат (издатель, срок действия, соответствие домена)
  4. Обмен ключами — обе стороны вычисляют общий сессионный ключ
  5. Зашифрованная связь — весь последующий трафик шифруется

Цепочка сертификатов

Корневой УЦ
  └─ Промежуточный УЦ
      └─ Сертификат конечного субъекта (ваш сайт)

Браузеры доверяют встроенному списку корневых удостоверяющих центров (УЦ). Они проверяют ваш сертификат, проходя по цепочке до доверенного корня.

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

По уровню проверки

DV — Domain Validation (проверка домена)

Проверяет только владение доменом. Выдаётся за минуты. Бесплатно через Let's Encrypt. Подходит для большинства сайтов.

OV — Organization Validation (проверка организации)

Проверяет владение доменом и подлинность организации. Занимает 1–3 рабочих дня. Подходит для бизнес-сайтов.

EV — Extended Validation (расширенная проверка)

Самая строгая проверка — проверка юридического лица, телефонная верификация. Занимает 1–2 недели. Используется банками и крупными интернет-магазинами. Примечание: с 2019 года основные браузеры больше не показывают зелёную строку с названием организации.

По охвату

Как проверить сертификат

Браузер

Нажмите на значок замка в адресной строке → просмотрите данные сертификата: кому выдан, издатель, дата истечения.

Командная строка

# Просмотр информации о сертификате
openssl s_client -connect example.com:443 -servername example.com

# Проверка даты истечения
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -dates

Онлайн-инструменты

Типичные ошибки

Сертификат истёк — NET::ERR_CERT_DATE_INVALID

Обновите сертификат. Используйте автоматическое обновление Certbot для предотвращения этой проблемы.

Несоответствие домена — NET::ERR_CERT_COMMON_NAME_INVALID

Сертификат не покрывает запрашиваемый домен. Получите сертификат для правильного домена или используйте wildcard-сертификат.

Неполная цепочка — NET::ERR_CERT_AUTHORITY_INVALID

Промежуточный сертификат отсутствует в конфигурации сервера.

# Nginx — используйте fullchain.pem, а не просто cert.pem
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;

Смешанный контент

HTTPS-страница загружает HTTP-ресурсы (изображения, скрипты, стили). Обновите все URL ресурсов на HTTPS или используйте протокол-относительные URL (//example.com/image.jpg).

Let's Encrypt

Let's Encrypt — это бесплатный, автоматизированный, открытый удостоверяющий центр, управляемый некоммерческой организацией ISRG. Он сделал HTTPS доступным для всех.

Certbot (рекомендуется)

# Установка на Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx

# Выпуск и автоматическая настройка Nginx
sudo certbot --nginx -d example.com -d www.example.com

# Тест автоматического обновления
sudo certbot renew --dry-run

# Cron для автоматического обновления
0 0,12 * * * certbot renew --quiet

acme.sh (лёгкая альтернатива)

curl https://get.acme.sh | sh
acme.sh --issue -d example.com -d www.example.com --nginx

Лучшие практики

# Nginx — надёжная TLS-конфигурация
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

# Включение HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;