Траблшутинг Kerberos: Ошибка KRB_AP_ERR_MODIFIED (Target Principal Name is Incorrect)
Архитектура Kerberos и симптомы нарушения доверия (Ticket Decryption Failure)
Пользователи пытаются получить доступ к сетевой папке (SMB), интранет-порталу (IIS) или базе SQL Server с использованием Single Sign-On (SSO). Вместо бесшовного входа они получают запрос пароля (Authentication Prompt), а при вводе верного пароля видят ошибку: "Целевое имя участника неверно (The target principal name is incorrect)". В системном журнале клиентского ПК фиксируется Event ID 4 источника Kerberos с ошибкой KRB_AP_ERR_MODIFIED.
Суть сбоя криптографии Kerberos:
Когда клиент запрашивает доступ к серверу FS01, контроллер домена (KDC) зашифровывает сервисный билет (TGS) ключом, который (как думает KDC) принадлежит серверу FS01. Клиент приносит этот билет на сервер FS01. Сервер пытается расшифровать билет своим закрытым машинным ключом, и не может. Происходит это потому, что KDC зашифровал билет ключом ДРУГОГО сервера (например, из-за дублирования SPN) или клиент принес билет не на тот сервер (из-за ошибки маршрутизации DNS). Сервер отвергает билет (Modified/Decryption failure).
Дерево решений: Устранение конфликтов имен и SPN
Сценарий 1: Устранение дубликатов в DNS (DNS CNAME / A-Record Conflicts)
Самая частая причина: клиент пингует имя fs01.domain.com, но в DNS под этим именем 'висит' IP-адрес старого (или другого) сервера fs02.
- Выполните на ПК клиента очистку кэша:
ipconfig /flushdns. - Пропингуйте целевой сервер:
ping fs01. Сверьте IP-адрес. - Зайдите на консоль DNS (
dnsmgmt.msc) и удалите ВСЕ устаревшие A-записи или CNAME-псевдонимы, указывающие на неправильные IP-адреса. Убедитесь, что PTR (Reverse Lookup) указывает на правильное имя. - Очистите кэш билетов на клиенте (сброс старых билетов):
klist purge
Сценарий 2: Поиск дублирующихся SPN в Active Directory
Если DNS настроен верно, возможно, два разных компьютера в AD зарегистрировали один и тот же ServicePrincipalName (например, HOST/fs01).
- Откройте командную строку на контроллере домена.
- Выполните поиск дублей по всему лесу:
setspn -X - Если найден дубликат SPN, удалите его с неправильной (старой) учетной записи:
setspn -D HOST/fs01.domain.com OldServer$
Сценарий 3: Рассинхронизация машинного пароля (Secure Channel Broken)
Если DNS и SPN в норме, то сервер-цель просто забыл свой собственный пароль (например, после отката из снапшота), а в KDC хранится новый. Их ключи больше не совпадают.
- Зайдите на целевой сервер под локальным администратором.
- Выполните команду PowerShell для синхронизации пароля ПК с доменом:
Test-ComputerSecureChannel -Repair -Credential (Get-Credential) - Перезагрузите сервер.
Типовые ошибки администраторов
- Попытка зайти по IP-адресу вместо имени: Если пользователь заходит на шару по IP (
\\192.168.1.5), Kerberos НЕ РАБОТАЕТ. Клиент не может построить SPN из IP-адреса и принудительно 'падает' на NTLM (который может быть заблокирован политиками ИБ). Учите пользователей заходить по DNS-именам!
Траблшутинг архитектуры Kerberos требует понимания криптографии и анализа сетевого трафика. Доверьте инфраструктуру системным инженерам ITSTM: мы устраним конфликты SPN, настроим правильное делегирование (Constrained Delegation) и гарантируем бесперебойную работу SSO.
Частые вопросы (FAQ)
Почему ошибка пропадает, если перевести сервер в рабочую группу и обратно в домен?
Операция Re-Join принудительно генерирует новый машинный пароль (обновляя его в базе KDC) и заново регистрирует правильные SPN, устраняя как сбои Secure Channel, так и часть проблем с SPN. Однако использование 'Test-ComputerSecureChannel -Repair' работает быстрее и не меняет SID компьютера.
Связан ли KRB_AP_ERR_MODIFIED с рассинхронизацией времени?
Напрямую — нет. Рассинхронизация времени более чем на 5 минут генерирует ошибку KRB_AP_ERR_SKEW (Clock Skew). Ошибка MODIFIED указывает именно на криптографическое несоответствие ключей.
Может ли настройка CNAME-записей для сайтов IIS вызывать эту ошибку?
Да! Если вы создали CNAME 'portal' для сервера 'web01', браузер запросит SPN 'HTTP/portal'. Но по умолчанию сервер 'web01' регистрирует SPN только 'HOST/web01'. Контроллер домена не найдет SPN и вернет ошибку. Нужно вручную зарегистрировать SPN: 'setspn -S HTTP/portal web01$'.
Как проанализировать процесс получения билета на клиенте?
Включите отладочное журналирование Kerberos в реестре: HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters, создав DWORD 'LogLevel' со значением 1. После этого в журнале System появятся детальные расшифровки шагов TGT и TGS.