# конспект · шаг 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 одной строкой конфига.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий