Полное руководство по SSL-сертификатам
Содержание
Что такое SSL/TLS?
SSL (Secure Sockets Layer) и его преемник TLS (Transport Layer Security) — это криптографические протоколы, обеспечивающие безопасность связи в интернете. Когда вы посещаете HTTPS-сайт, TLS шифрует соединение между вашим браузером и сервером, предотвращая перехват и подмену данных.
- Шифрование — защищает конфиденциальные данные при передаче
- Аутентификация — подтверждает подлинность сервера
- Целостность — гарантирует, что данные не были изменены
- SEO — Google использует HTTPS как фактор ранжирования
- Доверие — браузеры показывают значок замка для HTTPS-сайтов
Как это работает
TLS-рукопожатие устанавливает безопасное соединение в следующие этапы:
- Client hello — браузер отправляет поддерживаемые версии TLS и наборы шифров
- Server hello — сервер выбирает версию/шифр и отправляет свой сертификат
- Проверка сертификата — браузер проверяет сертификат (издатель, срок действия, соответствие домена)
- Обмен ключами — обе стороны вычисляют общий сессионный ключ
- Зашифрованная связь — весь последующий трафик шифруется
Цепочка сертификатов
Корневой УЦ
└─ Промежуточный УЦ
└─ Сертификат конечного субъекта (ваш сайт)
Браузеры доверяют встроенному списку корневых удостоверяющих центров (УЦ). Они проверяют ваш сертификат, проходя по цепочке до доверенного корня.
Типы сертификатов
По уровню проверки
DV — Domain Validation (проверка домена)
Проверяет только владение доменом. Выдаётся за минуты. Бесплатно через Let's Encrypt. Подходит для большинства сайтов.
OV — Organization Validation (проверка организации)
Проверяет владение доменом и подлинность организации. Занимает 1–3 рабочих дня. Подходит для бизнес-сайтов.
EV — Extended Validation (расширенная проверка)
Самая строгая проверка — проверка юридического лица, телефонная верификация. Занимает 1–2 недели. Используется банками и крупными интернет-магазинами. Примечание: с 2019 года основные браузеры больше не показывают зелёную строку с названием организации.
По охвату
- Для одного домена — покрывает один домен, например
www.example.com - Wildcard — покрывает все поддомены, например
*.example.com - Мультидоменный (SAN) — покрывает несколько разных доменов в одном сертификате
Как проверить сертификат
Браузер
Нажмите на значок замка в адресной строке → просмотрите данные сертификата: кому выдан, издатель, дата истечения.
Командная строка
# Просмотр информации о сертификате
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
Онлайн-инструменты
- SSL Labs — комплексный тест SSL-конфигурации
- 301check.com — показывает TLS-информацию для каждого перехода в цепочке перенаправлений
- crt.sh — поиск в журналах прозрачности сертификатов
Типичные ошибки
Сертификат истёк — 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;
- Настройте оповещения об истечении сертификата (за 30 дней)
- Используйте CAA DNS-записи для ограничения УЦ, которые могут выдавать сертификаты для вашего домена
- Мониторьте журналы прозрачности сертификатов на предмет несанкционированной выдачи
- Тестируйте конфигурацию с помощью SSL Labs