1. 1

# конспект · шаг 1 из 1

Конспект раздела: TLS

выжимка - её можно унести в заметки

Раздел про TLS без магии: три файла, автоматический выпуск и настройки, которых достаточно.

Что нужно знать про файлы

fullchain.pem = cert.pem + chain.pem   → ssl_certificate
privkey.pem                            → ssl_certificate_key

Указали cert.pem - сайт работает в Chrome и ломается у curl, мобильных приложений и платёжных шлюзов.

Выпуск и продление

80 порт: location /.well-known/acme-challenge/  ← ДО редиректа на https
         location / → return 301 https://$host$request_uri
продление: --deploy-hook "systemctl reload nginx"
Способ Когда
certbot webroot классика, полный контроль над конфигом
--nginx быстро, certbot сам правит конфиг
нативный модуль ACME (1.29.0+) без внешнего клиента
dns-01 wildcard и серверы без входящего 80

Настройки: что трогать, а что нет

Директива Вердикт
ssl_protocols, ssl_ciphers умолчания уже хорошие
ssl_session_cache, ssl_session_timeout нужны, только если выключены билеты: возобновление и так работает
ssl_prefer_server_ciphers не про безопасность в TLS 1.3
ssl_stapling мёртвая строка с сертификатами Let's Encrypt
HSTS включать поэтапно, preload необратим

Что показал стенд

опыт результат
сертификат без промежуточного openssl код 21, curl код 20, десктопный браузер часто открывает
имя только в CN, без SAN curl 200, Chrome ERR_CERT_COMMON_NAME_INVALID
ssl_reject_handshake on, чужое имя предупреждение TLS 112, сертификата нет вовсе
клиент без SNI на том же блоке то же самое: старый клиент сайт не откроет
wildcard *.shop.local a.shop.local да, a.b.shop.local и shop.local нет
подменили файлы сертификата старый серийник, пока нет reload
ssl_protocols TLSv1 без SECLEVEL=0 рукопожатие рвётся: решает OpenSSL, а не директива
умолчания, повторное соединение Reused - работают билеты сессий
return 301 на уровне server челлендж ACME уезжает в редирект (301 вместо 200)
модуль ACME без resolver единственная из четырёх ошибок, которую ловит nginx -t

Проверка

$  команда
openssl s_client -connect shop.local:443 -servername shop.local </dev/null \
  | openssl x509 -noout -dates -subject
curl -sI https://shop.local/ | grep -i strict-transport

Чек-лист: что ты должен уметь объяснить

  • Чем fullchain.pem отличается от cert.pem и как выглядит ошибка.
  • Почему блок с ACME-челленджем должен стоять до редиректа.
  • Что произойдёт после продления, если не перезагрузить nginx.
  • Почему ssl_stapling теперь выдаёт предупреждение.
  • Чем опасны includeSubDomains и preload в HSTS.
  • Почему сертификат выбирается до HTTP-запроса и что из этого следует.
  • Чем ssl_reject_handshake лучше чужого сертификата в блоке по умолчанию.
  • Почему нельзя вернуть TLS 1.0 одной строкой конфига.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.