Сертифікати - найчастіше від Let's Encrypt (безкоштовні, на 90 днів) через протокол ACME. Короткий термін - свідомий вибір: компрометований сертифікат швидше перестає діяти, а автоматизація стає обов'язковою.
Автоматизація замість ручного оновлення:
- Caddy чи FrankenPHP отримують і оновлюють сертифікати автоматично, без жодних налаштувань;
- Certbot з таймером systemd для Nginx/Apache;
- хмарні балансувальники й CDN (Cloudflare, AWS) керують сертифікатами самі.
Прострочений сертифікат - одна з найпоширеніших причин «падіння» сайту, тому навіть з автоматизацією потрібен моніторинг терміну дії зі сповіщенням за 2-3 тижні.
Конфігурація TLS - не вигадувати власну, а брати перевірену: Mozilla SSL Configuration Generator генерує налаштування для Nginx, Apache, HAProxy під профіль:
- Modern - лише TLS 1.3 (сучасні клієнти);
- Intermediate - TLS 1.2 і 1.3 з надійними шифрами (рекомендований для більшості сайтів);
- Old - для дуже старих клієнтів (уникати).
Що має бути в налаштуваннях:
- вимкнені SSL 3.0, TLS 1.0 і 1.1;
- шифри з прямою секретністю (ECDHE) і AEAD (AES-GCM, ChaCha20-Poly1305);
- HSTS (
Strict-Transport-Security) після того, як HTTPS працює стабільно; - редирект з HTTP на HTTPS для сайту (для API - краще відмова);
- OCSP stapling - якщо CA його підтримує (Let's Encrypt відмовляється від OCSP на користь коротших сертифікатів і CRL).
Перевірка: SSL Labs Server Test (оцінка A/A+), testssl.sh для внутрішніх серверів.
Внутрішній трафік: TLS, що закінчується на балансувальнику чи Cloudflare, лишає незашифрованим шлях до сервера застосунку. Для Cloudflare - режим Full (strict) з сертифікатом на сервері (зокрема безкоштовним Origin CA), а не Flexible, де трафік до origin іде по HTTP.
Приватні ключі - доступні лише процесу вебсервера, не в репозиторії, не в бекапах без шифрування.
Докладніше в документації: Mozilla SSL Configuration Generator