Вопрос или проблема
Есть несколько компьютеров, на которых сертификаты пользователя внезапно перестают работать.
Запуск certutil -silent -user -store my
показывает, что все сертификаты пользователя для затронутого пользователя перестали работать.
my
================ Сертификат 0 ================
Серийный номер: 2a0000210be8f0775a3a2e2b7200040000210b
Издатель: CN=PROD Issuing CA, DC=somecompany, DC=Com, DC=Au
Дата начала действия: 10/01/2017 7:46 AM
Дата истечения: 10/01/2018 7:46 AM
Тема: CN=username, OU=somecompany, OU=Level 1, OU=Laptop Users, OU=Special Group Users, DC=somecompany, DC=Com, DC=Au
Не корневой сертификат
Шаблон: 1.3.6.1.4.1.311.21.8.4586432.4805332.10505398.7351119.9274134.0.14270575.7769536
Хэш сертификата (sha1): cc 3b d0 2c 03 a1 d9 d4 0d 28 31 a7 84 c8 6d cb 6d 97 27 d8
Контейнер ключей = 48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d
Провайдер = Microsoft Enhanced Cryptographic Provider v1.0
Не удается найти сертификат и закрытый ключ для расшифровки.
================ Сертификат 1 ================
Серийный номер: 7b4d6131959b5f6cd272
Издатель: CN=Communications Server
Дата начала действия: 25/08/2017 10:41 AM
Дата истечения: 25/08/2017 6:41 PM
Тема: [email protected]
Не корневой сертификат
Шаблон:
Хэш сертификата (sha1): 80 25 75 64 60 77 21 16 35 18 ee 04 4f 87 bc 5f f0 ae b3 2a
Контейнер ключей = [email protected]
Провайдер = Microsoft Enhanced Cryptographic Provider v1.0
Не удается найти сертификат и закрытый ключ для расшифровки.
Проверка папки %APPDATA%\Microsoft\Crypto\RSA
показывает, что файлы закрытых ключей присутствуют, то есть в данном случае для первого сертификата 48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d
.
Каковы потенциальные причины этой проблемы? Я подозреваю, что ключ шифрования для закрытого ключа стирается/изменяется, но интересуюсь, как подтвердить, что это действительно происходит.
В данном случае мы используем хэш сертификата (sha1) для нахождения сертификата пользователя в %APPDATA%\Microsoft\SystemCertificates\My\Certificates\CC3BD02C03A1D9D40D2831A784C86DCB6D9727D8
, который присутствует.
Затем, используя поле контейнера ключа, мы находим закрытый ключ в %APPDATA%\Microsoft\Crypto\RSA\S-1-5-21-2091123715-180627453-533688462-45495\48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d
, который также присутствует.
Файлы были изменены:
• Файл SystemCertificates CC3BD02C03A1D9D40D2831A784C86DCB6D9727D8 был последний раз изменен 25/08/2017 10:55. Был ли это момент, когда запрашивался новый ключ, т.е. сообщал ли пользователь о проблеме до этого времени?
• Файл закрытого ключа под %APPDATA%\Microsoft\Crypto\RSA\S-1-5-21-2091123715-180627453-533688462-45495\48fa6c038e897eb98ea252b465308c55_7cc43284-5d87-4ba0-8673-6fb4d4de8f2d
был последний раз изменен 10/01/2017 7:56 (ближайшее время к времени выпуска на системном сертификате)
• Закрытый ключ был зашифрован мастер-ключом, хранящимся в %APPDATA%\Microsoft\Protect\<user SID>\c77f3872-e1e2-4449-9729-cc97e85e4a3c
, который был последний раз изменен 25/07/2017 8:19
• Папка Protect, содержащая мастер-ключ, используемый для расшифровки закрытых ключей, имеет файлы, последний раз измененные 14/08/2017 8:23
• %APPDATA%\Microsoft\SystemCertificates\My\Certificates
имеет файлы сертификатов размером 0 байт, измененные 12/07/2017 12:00 – 7:50 по разным интервалам и 8/06/2017 11:52 – 9/06/2017 8:33 каждые 8 минут
В настоящее время мы используем аудит Windows для поиска изменений в папках %APPDATA%\Microsoft\SystemCertificates
, %APPDATA%\Microsoft\Crypto
и %APPDATA%\Microsoft\Protect
Однако, учитывая, что файлы сертификатов и закрытых ключей, похоже, существуют, не уверен, что это поможет выяснить причину.
В приложении также есть ошибки для источника CertificateServicesClient-AutoEnrollment:
Автоматическая регистрация сертификата для domain\username завершилась неудачей
(0x8007003a) Указанный сервер не может выполнить запрашиваемую
операцию.
Какие рекомендуемые шаги для дальнейшего выявления коренной причины ошибки “Не удается найти сертификат и закрытый ключ для расшифровки.”?
Проблема, похоже, вызвана сбросом паролей удаленно. В тестовой среде воспроизвел проблему:
• Сервер 2012 R2 Контроллер домена с сертификационным центром, настроенным на автоматическую регистрацию
• Клиент Windows 7 x64, присоединенный к домену
• Изолированная сеть, в которой хостится только DC и клиент
• Шаблон сертификата пользователя с экспортируемым закрытым ключом
- Развернут сертификат пользователя на клиенте через политику групповой автоматической регистрации
- Удален клиент из сети
- Подтверждено, что пользователь может экспортировать закрытый ключ сертификата, позволяя экспорт с использованием certmgr на клиенте Windows 7
- Клиент снова подключен к сети
- Сброшен пароль пользователя, который вошел на клиенте с контроллера домена
- Использован “Запуск от имени” для кеширования обновленного пароля на клиенте
- Клиент отключен от сети
- Выход из системы / вход в систему без подключения к сети с обновленными кешированными учетными данными
- Закрытый ключ не может быть экспортирован
- Клиент снова подключен к сети
- Закрытый ключ не может быть экспортирован
- Выход из системы / вход в систему подключенным к сети – Теперь снова можно экспортировать закрытый ключ
Закрытые ключи защищены и шифруются с использованием мастер-ключей, хранящихся в %APPDATA%\Microsoft\Protect\\ Мастер-ключи дополнительно шифруются комбинацией элементов, включая пароль пользователя. Если мастер-ключ не удается расшифровать, закрытый ключ не может быть использован.
Способ изменения пароля – Ctrl+Alt+Del “Изменить пароль” на клиенте
С использованием Process Monitor было установлено, что процесс Local Security Authority (LSASS.exe) выполняет следующие действия:
- Связь с контроллером домена по порту TCP 88 (kerberos) и TCP 464 (kpasswd / kerberos v5)
- Обновление регистрационного ключа под HKLM\Security\Cache
- Запись в \domaincontroller\PIPE\protected_storage
- Служба профиля пользователя обновляет HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\\RefCount
- Обновление мастер-ключей, используемых для расшифровки закрытых ключей:
%APPDATA%\Microsoft\Protect\\
- Чтение файлов SYNCHIST и CREDHIST в %APPDATA%\Microsoft\Protect
- Обновление файла %APPDATA%\Microsoft\Protect\SYNCHIST
- Процесс 1-7 может повторяться несколько раз
- Обновление C:\Windows\debug\PASSWD.log с сообщением “Попытка изменения пароля для сервера/домена для пользователя
Закрытые ключи продолжают работать благодаря шагам 5 – 7.
Способ изменения пароля – Удаленный сброс через Active Directory Пользователи и компьютеры
- Файлы SYNCHIST и мастер-ключа не обновляются автоматически мгновенно
- Выход из системы / вход в систему в сети обновляют файлы SYNCHIST и мастер-ключа, сертификаты в порядке
Ответ или решение
Проблема с сообщением "Не удается найти сертификат и закрытый ключ для расшифровки" может возникнуть по нескольким причинам, особенно в условиях смены пароля пользователя и автоматической обработки сертификатов в среде Active Directory. Ниже приведены возможные причины этой проблемы и рекомендации по ее устранению.
Возможные причины проблемы:
-
Изменение пароля пользователя: Как показано в вашем тестовом окружении, смена пароля (особенно если она происходит удаленно или без предварительного входа в систему) может вызвать несовпадение между закрытым ключом и мастер-ключом, который используется для его расшифровки. Приватные ключи шифруются с помощью мастер-ключей, которые в свою очередь зависят от текущего пароля пользователя.
-
Ошибки в автоматическом обновлении сертификатов: Ошибки с автоназначением сертификатов могут привести к тому, что закрытые ключи не будут правильно сопоставлены с сертификатами после изменений в учетной записи пользователя.
-
Повреждение файлов ключей или сертификатов: Редактирование или случайное удаление файлов, связанных с учётными записями в папках, связанных с криптографией, может вызвать ошибки при доступе к ключам.
-
Проблемы с доступом к хранилищу сертификатов: Если у пользователя нет необходимых прав доступа к ключам или сертификатам, это также может вызвать данную ошибку.
Рекомендации по устранению проблемы:
-
Проверка целостности сертификатов и ключей:
- Убедитесь, что все необходимые файлы сертификатов и закрытых ключей действительно существуют в соответствующих каталогах, и что они не были повреждены или удалены.
-
Обновление мастер-ключей:
- Попросите пользователей выйти из своей учетной записи и войти снова после изменения пароля через интерфейс Ctrl+Alt+Del. Это гарантирует, что мастер-ключи будут обновлены.
- Либо выполните повторное назначение сертификата через внутреннюю политику группы или вручную.
-
Аудит изменения сертификатов и ключей:
- Включите аудит на папках
%APPDATA%\Microsoft\SystemCertificates
,%APPDATA%\Microsoft\Crypto
, и%APPDATA%\Microsoft\Protect
, чтобы отслеживать любые изменения, которые могут повлиять на доступ к ключам.
- Включите аудит на папках
-
Ручное восстановление:
- Если ошибка продолжается, попробуйте вручную экспортировать и импортировать сертификаты и ключи, чтобы убедиться в их корректном сопоставлении.
-
Настройка политики сертификатов:
- Убедитесь, что параметры автоматического назначения сертификатов настроены правильно в вашей Групповой политике, чтобы минимизировать несоответствия в будущем.
Дополнительные шаги по диагностике:
- Используйте инструмент Process Monitor для отслеживания изменений, производимых процессами LSASS и User Profile Service во время смены пароля.
- Проверьте Журнал событий Windows на наличие сообщений об ошибках в службе сертификатов, особенно ошибок, связанных с автоматическим обновлением (например, события
CertificateServicesClient-AutoEnrollment
).
Следуя вышеуказанным рекомендациям, вы сможете лучше понять и устранить проблему с сертификатами и закрытыми ключами, а также предотвратить её повторение в будущем.