Сертификаты и рукопожатие

Что это такое

TLS-сертификат связывает имя хоста с открытым ключом и подписан удостоверяющим центром, которому клиент уже доверяет. Во время рукопожатия сервер доказывает, что владеет соответствующим закрытым ключом, и стороны выводят общий секрет и ключ шифрования для сессии. Клиент покупает гарантию, что машина, отвечающая за имя хоста магазина, — та самая, которую называет сертификат.

Почему это важно

Сертификат — единственная часть HTTPS, которая защищает от атакующего, контролирующего сеть, а не сервер. Без действительного сертификата одно шифрование было бы бесполезно: вы вели бы приватный разговор с тем, кто вас перехватил. Отказы, доходящие до продакшена, редко криптографические; они операционные: истёкший сертификат, продление, которое не автоматизировали, отсутствующее промежуточное звено или имя хоста, не совпадающее с тем, что набирают пользователи.

Ключевые идеи

Совпадайте с именем, которое набирает пользователь

Сертификат действителен для перечисленных в нём имён. Добавление хоста без выпуска под него даёт жёсткую ошибку браузера, а не предупреждение.

Сертификат:            DNS: example.com, DNS: www.example.com
Пользователи набирают: example.com      -> действителен
Пользователи набирают: shop.example.com -> несовпадение имени, браузер блокирует

Покройте каждый обслуживаемый поддомен или используйте маску, где это позволяет политика, и помните, что отсутствие варианта с www — настоящий простой для всякого, кто его наберёт.

Автоматизируйте выпуск и продление, потом проверьте автоматизацию

Сертификаты истекают, обычно в пределах 90 дней для автоматических центров. Ручное продление — это повторяющийся простой, ждущий, пока кто-нибудь уйдёт в отпуск.

Продление запускается на 2/3 срока, без участия человека
Алерт, если продление не удалось за 14 дней до истечения
Проверка: следите за датой истечения снаружи сети, а не с сервера

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

Отдавайте полную цепочку

Сервер должен отправить свой сертификат плюс промежуточные, по порядку. Браузеры кэшируют промежуточные звенья, увидев их где-то ещё, поэтому отсутствующее звено часто невидимо при тестировании и отказывает у свежего клиента.

Выбирайте протоколы и шифры из актуальной базовой линии

Отключите устаревшие версии и слабые наборы шифров и позвольте рекомендованным настройкам библиотеки сделать работу. Старые версии протокола нужны только клиентам, которых на практике уже нет.

Держите закрытый ключ в тайне и отдельно

Ключ — это и есть подлинность. Ограничьте права на файл, никогда не коммитьте его и не копируйте в артефакт сборки или слой образа, из которого его нельзя удалить. Если он утёк, сертификат нужно отозвать и выпустить заново, а не просто заменить.

Практика

Проверьте один хост из-за пределов своей сети

Проверьте отдаваемую цепочку, совпадение имени хоста и дату истечения с машины вне сети хостинга для каждого имени хоста, на котором отвечает продукт.

Готово, когда: каждое имя хоста в продукте показывает действительную цепочку с остатком более 30 дней, проверенную снаружи.

Сломайте продление намеренно

Запустите процесс продления в стенде без автоматизации и запишите, как вы об этом узнали.

Готово, когда: отказ породил алерт до даты истечения, или вы добавили алерт, который это сделал бы.

Частые ошибки

  • Ручное продление — сертификат истекает, когда никто не смотрит; исправить: автоматизируйте и предупреждайте до истечения.
  • Имя хоста без сертификата — новый поддомен даёт жёсткую ошибку браузера; исправить: покройте каждое обслуживаемое имя, включая вариант с www.
  • Неполная цепочка — работает в офисе и отказывает у свежего клиента; исправить: отдавайте промежуточные звенья по порядку.
  • Оставленные включёнными устаревшие версии протокола — согласование понижается до чего-то сломанного; исправить: используйте текущую рекомендованную конфигурацию библиотеки.
  • Закрытый ключ, скопированный в артефакты сборки — его не удалить после публикации; исправить: держите ключ вне образов и логов и считайте любую утечку компрометацией.

Что читать дальше