Имена, адреса и TLS — Примеры

Пример 1 — Изменение записи, которое будто не вступило в силу

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

клиент -> резолвер -> корень -> домен верхнего уровня -> авторитетный сервер
         на каждом шаге ответ кэшируется на объявленное время жизни записи
изменена запись: запись адреса для имени сервиса
наблюдение: внутренние клиенты следуют изменению; внешние держат старый адрес

Решение

причина: каждый резолвер держит предыдущий ответ, пока не истечёт его время жизни
перед следующим переносом: понизьте время жизни записи, дождитесь, пока старое
                          значение истечёт везде, затем измените адрес, потом
                          поднимите его снова
отдельно: внутренние и внешние клиенты могут получать разные ответы; проверяйте
          с позиции клиента, а не изнутри той же сети

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

Пример 2 — Рукопожатие, которое падает на имени, а не на сроках

Клиент обращается к сервису по одному имени, и рукопожатие падает; тот же сервис отвечает по другому имени. И сроки сертификата, и его цепочка действительны. Объясните сбой и дайте два решения.

сервис отвечает на:   основное имя и его вариант с префиксом
сертификат покрывает: основное имя и одну метку в другом домене
результат рукопожатия: запрошенное имя не входит в список, который удостоверяет сертификат

Решение

причина:  шаблон покрывает одну метку под чужим доменом, а не вариант основного
          имени; сертификат для одного имени не удостоверяет другое
решение A: получите сертификат, в имена которого входит вариант с префиксом
решение B: выпустите отдельный сертификат для этого имени и отдавайте его
           на соответствующем слушателе
затем:    автоматизируйте продление, чтобы новое покрытие стало не-событием,
          а не датой, которую надо помнить

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