Несовпадение имени или истечение срока сертификата: как их различить
Несовпадение имени означает, что сертификат выдан для другого объекта; истечение срока означает, что он недействителен сейчас. Прочитайте этап сбоя, прежде чем сбрасывать учётные данные.
Два сбоя VPN выглядят из кресла пользователя одинаково, а требуют противоположных исправлений. Несовпадение имени означает, что сертификат действителен, но выдан для другого объекта. Ошибка истечения срока означает, что сертификат недействителен в данный момент. Ни то, ни другое не является проблемой пароля, и сброс учётных данных — самый частый потерянный час в обоих случаях. Прочитайте этап, на котором происходит сбой, прежде чем что-либо трогать.
Текст ошибки и есть диагноз
Клиент сообщает, какая проверка не прошла, даже если сообщение краткое. Несовпадение называет ожидаемое имя хоста и найденное имя. Ошибка истечения упоминает даты действия или время. Эти два предложения указывают на разные части сертификата.
Читайте их на том этапе, где они появляются. Сбой во время рукопожатия — это проблема сертификата; сбой после поднятия туннеля — проблема маршрутизации или учётных данных. Сохранение этапа — это то, что не даёт расследованию уйти в несвязанные настройки.
Если сбой меняется от попытки к попытке, есть третья возможность: более одного узла за одним и тем же именем.
Проверки имени: что сравнивает клиент
Клиент сравнивает ожидаемую по конфигурации идентичность с именами в сертификате, которые находятся в расширении subjectAltName. Необработанный IP в профиле, псевдоним, который сертификат не перечисляет, или имя, которое просто разрешается в тот же сервер, — все они не проходят эту проверку. Достичь нужной машины — не то же самое, что предъявить нужную идентичность.
Изучайте сертификат, который сервер действительно предъявляет, а не файл из предыдущей попытки. Приведённая ниже команда запрашивает заданное вами имя, поэтому ответ включает сертификат, который увидел бы настоящий клиент.
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -dates -ext subjectAltNameСертификат доверенного издателя всё равно может быть для другой службы. Оставляйте проверки имени клиента включёнными, потому что доверие к CA не даёт прав на каждое имя, которое этот CA когда-либо подписывал. Отключение проверки превращает ошибку конфигурации в уязвимость.
Истечение срока: чьи часы читаются
Срок действия — это пара отметок времени, и проверяющий сравнивает их со своими часами. Устройство с неверными часами сообщает о действительном сертификате как об истёкшем или ещё не вступившем в силу, и исправлять нужно часы, а не сертификат. Разница в отображении часового пояса — не то же самое, что неверное базовое время.
Сравните даты сертификата с UTC на клиенте, прежде чем делать выводы:
openssl x509 -in cert.pem -noout -dates
date -uЕсли даты действительно прошли, продлите через издателя. Если замена существует, но ещё не вступила в силу, следуйте поддерживаемому переходу, а не переводите часы, чтобы подстроиться под неё. Возврат даты устройства назад ради сертификата — решение с последствиями далеко за пределами туннеля.
Почему исправление одного обнажает другое
Проверка выполняет последовательность проверок, и первый сбой останавливает отчёт. Исправьте имя, и клиент может затем сообщить, что цепочка неполна или что срок действия сертификата истёк. Это не значит, что первая проверка была лишней. Это значит, что у цепочки было больше одной проблемы, поэтому ожидайте вторую ошибку, а не читайте её как доказательство того, что первое исправление было неверным.
Несколько узлов усугубляют это. Служба с балансировкой нагрузки может предъявлять разные сертификаты от разных участников, поэтому тест, который проходит дважды и падает один раз, говорит о парке, а не о вашем клиенте. Сохраняйте адрес партнёра и время попытки в диагнозе.
Именно эта деталь превращает нестабильный тикет в воспроизводимый.
Докажите это новым подключением
После ремонта откройте новое подключение вместо возобновления старого и подтвердите, что этап, который раньше сбоил, теперь проходит. Затем подтвердите, что туннель действительно передаёт трафик, потому что успешное рукопожатие — не работающий маршрут.
Сохраняйте точный этап ошибки и сведения о сертификате вместе с тикетом.
Именно эта запись удерживает следующего человека от сброса паролей учётной записи из-за проблемы с сертификатом. Идентичность и срок действия — отдельные вопросы, и RFC 5280 служит ориентиром для того, как оценивается второй.