Event ID 36871 Schannel: Фатальная ошибка при создании учетных данных клиента
Архитектура Schannel и проблема создания TLS-контекста
Событие 36871 логируется источником Schannel в журнале System. Сообщение: "Произошла неустранимая ошибка при создании учетных данных клиента (сервера) TLS. Внутреннее состояние ошибки: [Код] (A fatal error occurred while creating a TLS client credential)". В отличие от события >36888, которое возникает во время общения с клиентом, ошибка 36871 означает, что криптографическая подсистема самого сервера сломана локально. Сервис (например, служба IIS, Exchange, Служба управления удаленными рабочими столами) пытается запросить у операционной системы доступ к SSL-сертификату и его закрытому ключу для запуска HTTPS-слушателя, но получает категорический отказ (Access Denied или Cryptographic Exception). Бизнес-риски: веб-сайты не поднимаются, почта перестает ходить (SMTP TLS Failed), аутентификация ломается.
Типовые причины сбоя локальной криптографии:
- Служебная учетная запись (например,
NETWORK SERVICEили AppPool) не имеет прав чтения приватного ключа SSL-сертификата в хранилищеMachineKeys. - Включен строгий режим соответствия стандартам FIPS (Federal Information Processing Standard), блокирующий 'непроверенные' алгоритмы.
- Отсутствуют включенные (включенные в реестре) версии протоколов (TLS 1.2/1.3), и система не может инициировать контекст безопасности.
Регламент восстановления криптографической подсистемы (MachineKeys)
Сценарий 1: Исправление прав доступа к закрытому ключу (Private Key)
Самая частая проблема: администратор импортировал PFX-сертификат, но забыл дать права системным службам (IIS, WCF) на его чтение.
- Откройте консоль управления сертификатами:
certlm.msc(Сертификаты - Локальный компьютер). - Перейдите:
Личные (Personal) -> Сертификаты. Найдите ваш SSL-сертификат. - Нажмите на него правой кнопкой мыши -> Все задачи (All Tasks) -> Управление закрытыми ключами (Manage Private Keys).
- Убедитесь, что группа NETWORK SERVICE и локальная группа IIS_IUSRS имеют права Чтение (Read). Добавьте их при необходимости.
- Перезапустите целевую службу (например,
iisreset).
Сценарий 2: Отключение жесткого режима FIPS
Режим FIPS запрещает использование многих современных (и устаревших) алгоритмов хеширования (например, MD5), что вызывает краш приложений .NET при инициализации TLS.
- Откройте редактор групповой политики:
gpedit.msc. - Перейдите:
Конфигурация компьютера -> Политики Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности. - Найдите политику Системная криптография: использовать FIPS-совместимые алгоритмы для шифрования, хеширования и подписывания.
- Переведите ее в состояние Отключен (Disabled). Если сервер не работает в госсекторе США, этот флаг приносит только вред. Перезагрузите сервер.
Сценарий 3: Аппаратные ключи (HSM / Токены)
Если сертификат установлен не программно, а работает через аппаратный токен (Рутокен, Aladdin, HSM модуль), событие 36871 указывает на потерю связи драйвера KSP/CSP с аппаратным устройством (Токен извлечен, или зависла служба Smart Card).
# Проверка статуса хранилища ключей KSP
certutil -csplistТиповые ошибки администраторов
- Импорт сертификата в хранилище пользователя: Администраторы часто импортируют PFX-файл просто двойным кликом. В этом случае сертификат попадает в хранилище Текущего пользователя (Current User). Системные службы уровня ядра (HTTP.sys) не видят пользовательские сертификаты, что вызывает ошибку 36871 при попытке привязки (Binding). Сертификаты для серверов должны импортироваться строго в хранилище Локального компьютера (Local Machine).
Некорректное управление закрытыми ключами и сертификатами (PKI) приводит к остановке критически важных сервисов и сервисных шин (ESB). Делегируйте обслуживание PKI-инфраструктуры инженерам ITSTM: наведем порядок в хранилищах MachineKeys, автоматизируем выпуск сертификатов и гарантируем безопасность каналов связи.
Частые вопросы (FAQ)
Почему 36871 генерируется при запуске браузера на самом сервере?
Если сервер сам выступает в роли клиента (например, скрипт PowerShell Invoke-WebRequest или браузер обращается к внешнему API по HTTPS), система должна создать 'TLS Client Credential'. Если системные настройки TLS в реестре сломаны, генерация контекста провалится.
Что означает внутреннее состояние ошибки 10013?
Код 10013 (Internal error state) обычно означает, что клиентское приложение запросило у ОС использование протокола (например, SSL 3.0), который глобально отключен в реестре Windows в ветке SCHANNEL\Protocols.
Как физически найти файл закрытого ключа на жестком диске?
Файлы закрытых ключей (RSA) хранятся в скрытой системной папке C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys. Повреждение прав на саму эту папку (должны быть права у Administrators и SYSTEM) глобально ломает всю криптографию сервера.
Может ли истекший сертификат вызывать 36871?
Нет. Истечение срока действия (Expired) вызывает ошибки проверки доверия на стороне клиента (Untrusted/Expired). Ошибка 36871 возникает на этапе до отправки сертификата, когда сервер даже не может 'прочитать' его из своего хранилища.