Настройка SSL/TLS значительно изменилась. Вот текущее состояние лучших практик на 2026 год — что включать, что отключать и что готовится на будущее.
Версии протоколов
| Протокол | Статус | Действие |
|---|---|---|
| SSL 2.0, 3.0 | Сломан | Отключить — критические уязвимости (POODLE, DROWN) |
| TLS 1.0 | Устарел (2021) | Отключить — уязвимость BEAST |
| TLS 1.1 | Устарел (2021) | Отключить — нет поддержки современных шифров |
| TLS 1.2 | Безопасен | Включить — только с шифрами AEAD |
| TLS 1.3 | Текущий стандарт | Включить — самый быстрый, самый безопасный |
Nginx: ssl_protocols TLSv1.2 TLSv1.3;
Apache: SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Наборы шифров
TLS 1.3 (настройка не требуется)
Все 5 наборов шифров безопасны. Не пытайтесь настраивать — лучше не сделаете.
TLS 1.2 (ограничить до AEAD)
# Nginx
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
Правила:
- Только наборы
ECDHE-*— обеспечивают прямую секретность - Только
*-GCM-*или*-CHACHA20-*— только шифры AEAD - Без шифров CBC — уязвимы к BEAST, Lucky13
ssl_prefer_server_ciphers off— пусть клиент выбирает (современные клиенты выберут лучший вариант)
Управление сертификатами
| Практика | Почему |
|---|---|
| Используйте ключи ECDSA P-256 | Меньше и быстрее, чем RSA 2048 |
| Автоматизируйте обновление | 47-дневный срок действия к 2029 году делает ручное обновление непрактичным |
Подавайте fullchain.pem | Предотвращает ошибки цепочки доверия |
| Мониторьте срок действия сертификата | Настройте оповещения на 60-й день из 90 |
| Используйте мониторинг Certificate Transparency | Обнаруживайте несанкционированные сертификаты |
| Ротируйте ключи при обновлении | Не используйте закрытые ключи повторно между сертификатами |
Заголовки безопасности
# HSTS — всегда использовать HTTPS (начните с короткого max-age, увеличьте позже)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# Предотвращение подмены MIME-типов
add_header X-Content-Type-Options "nosniff" always;
# Предотвращение кликджекинга
add_header X-Frame-Options "SAMEORIGIN" always;
# Обновление незащищённых подресурсов
add_header Content-Security-Policy "upgrade-insecure-requests" always;
Оптимизация производительности
| Настройка | Конфигурация | Преимущество |
|---|---|---|
| HTTP/2 | listen 443 ssl http2; | Мультиплексирование, сжатие заголовков |
| Кэширование сессий | ssl_session_cache shared:SSL:10m; | Избегает повторного рукопожатия для возвращающихся посетителей |
| Отключение session tickets | ssl_session_tickets off; | Лучшая прямая секретность |
| OCSP stapling | ssl_stapling on; | Быстрая проверка сертификата, лучшая конфиденциальность |
| Early data (0-RTT) | По умолчанию в TLS 1.3 | Возобновление без задержки (используйте осторожно) |
Полная конфигурация Nginx (готовая к продакшену)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
root /var/www/html;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Проверка: Введите ваш домен на SSL Labs — эта конфигурация должна получить оценку A+.
Чего НЕ делать
| Плохая практика | Почему | Что делать вместо |
|---|---|---|
ssl_protocols TLSv1 TLSv1.1; | Устарели, уязвимы | Только TLS 1.2 + 1.3 |
ssl_ciphers ALL; | Включает слабые шифры | Явный список ECDHE + AEAD |
ssl_prefer_server_ciphers on; (TLS 1.3) | Не нужно — все шифры TLS 1.3 безопасны | off |
Использование cert.pem вместо fullchain.pem | Отсутствующая цепочка → ошибки доверия | Всегда fullchain.pem для Nginx |
| Самоподписанные сертификаты в продакшене | Предупреждения браузера, нет доверия | Let’s Encrypt (бесплатно) |
| Один закрытый ключ годами | Ограничивает локализацию ущерба | Ротировать при каждом обновлении |
| Без HSTS | Уязвимость к атакам понижения | Включить после тестирования |
max-age=0 для HSTS | Фактически отключает HSTS | Начать с 300, увеличить до 63072000 |
Часто задаваемые вопросы
Как проверить мою конфигурацию SSL?
SSL Labs Server Test — введите ваш домен, получите детальный отчёт с буквенной оценкой (A-F). Проверьте поддержку протоколов, стойкость шифров, валидность цепочки и известные уязвимости.
Какую оценку нужно получить?
A+ для продакшен-сайтов. Для этого требуется: только TLS 1.2+, шифры AEAD, валидная цепочка, HSTS с длинным max-age. Конфигурация выше обеспечивает A+.
Как часто пересматривать конфигурацию SSL?
Ежегодно или при объявлении новой уязвимости. Подпишитесь на страницу статуса Let’s Encrypt и следите за Mozilla SSL Configuration Generator для актуальных рекомендаций.
Есть ли инструмент, который генерирует правильную конфигурацию?
Да — Mozilla SSL Configuration Generator. Выберите ваш сервер (Nginx, Apache и т.д.), версию сервера, и он сгенерирует рекомендуемую конфигурацию. Профиль «Modern» соответствует практикам из этой статьи.