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/  ← свой location
         location / → return 301 https://$host$request_uri
         (return - в location /, а не в server: порядок строк не спасёт)
продление: --deploy-hook "systemctl reload nginx"
Способ Когда
certbot webroot классика, полный контроль над конфигом
--nginx быстро, certbot сам правит конфиг
нативный модуль ACME (1.29.0+) без внешнего клиента
dns-01 wildcard и серверы без входящего 80

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

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

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

опыт результат
сертификат без промежуточного openssl s_client: Verify return code: 21; curl: код завершения 60, текст ошибки проверки 20 (unable to get local issuer certificate); десктопный браузер часто открывает
имя только в 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 не публикуется. Войти, чтобы не вводить имя каждый раз.