Где хранятся сертификаты в Windows?

Для управления сертификатами в Windows обычно используются графические MMC оснастки certlm.msc (сертификаты компьютера/ Local Machine), certmgr.msc (сертификаты пользователя / Current User), утилита командной строки certutil . Все эти инструменты используются для взаимодействия с логическим хранилищем сертификатов, которое скрывает от пользователя фактическое расположение открытых и закрытых ключей сертификатов на диске и в реестре.

Логические и физические хранилища сертификатов в Windows

Открытие и закрытые ключи сертификатов в Window не хранятся в одном месте. Открытые ключи сертификатов хранятся в реестре (могут быть извлечены), но их закрытые ключи (если имеются) хранятся на файловой системе и зашифрованы.

Сертификаты в реестре:

Пользователь HKCU\SOFTWARE\Microsoft\SystemCertificates Открытые ключи сертификатов пользователя
Пользователь HKCU\SOFTWARE\Policies\Microsoft\SystemCertificates Открытые ключи сертификатов пользователя, установленные групповыми политиками AD
Компьютер HKLM\SOFTWARE\Microsoft\SystemCertificates Открытые ключи сертификатов компьютера
Компьютер HKLM\SOFTWARE\Microsoft\Cryptography\Services Ключи различных службы
Компьютер HKLM\SOFTWARE\Policies\Microsoft\SystemCertificates Открытые ключи сертификатов компьютера, установленные через GPO
Компьютер HKLM\SOFTWARE\Microsoft\EnterpriseCertificates Ключи компьютера, установленные с корпоративного CA в домене AD

Закрытые ключи сертификатов на диске:

Пользователь %APPDATA%\Microsoft\SystemCertificates Каталог, в котором хранятся пользовательские открытые ключи и указатели на закрытые ключи сертификатов
Пользователь %APPDATA%\Microsoft\Crypto Контейнеры закрытых ключей пользователя
Компьютер %ProgramData%\Microsoft\Crypto Контейнеры закрытых ключей компьютера
Для шифрования закрытых ключей сертификатов в Windows используется шифрование DPAPI, при котором используется мастер ключ шифрования, который генерируется на базе пароля пользователя. Таким образом только владелец учетной записи, знающий пароль, может расшифровать закрытые ключи, что защищает закрытые ключи от сценария прямого сброса пароля администратора на компьютере.

К логическому хранилищу сертификатом можно обратиться из PowerShell с помощью встроенного Cert провайдера, по аналогии как вы обращаетесь к объектам на файловой системе.

Например, с помощью PowerShell перейдем в хранилище сертификатов компьютера:

cd Cert:\LocalMachine\my

Вывести список сертификатов в хранилище:

Get-Item *

PowerShell вывести сертификаты

Или можно вывести локальные сертификаты компьютера с помощью certutil:

certutil -store MY

Извлекаем сертификаты из реестра Windows

Эти же отпечатки сертификатов отображаются в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\MY. Данные каждого сертификата хранятся в бинарном параметре BLOB, содержащем полный сертификат в формате DER.

Открытый ключ сертификата хранится в реестре

Можно извлечь BLOB данные сертификата из реестра (по его отпечатку), перекодировать их в формат X509Certificate2 и получить информацию о сертификате:

$regPath = "HKLM:\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates\7780BAFFDD4469DAB7AF8F4283726721E4A9F4E8"
$blob = (Get-ItemProperty -Path $regPath).Blob
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList (, $blob)
$cert | Format-List Subject, Issuer, NotBefore, NotAfter, Thumbprint

извлекаем сертификат из реестра

Чтобы конвертировать данный открытый ключ сертификата в файл формата CER (для переноса на другой компьютер), выполните:

$certBytes = $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)
[System.IO.File]::WriteAllBytes("c:\temp\exported_certificate.cer", $certBytes)

конвертация сертификата из реестра в файл CER

Такой подход удобно использовать, когда нужно исследовать хранилище сертификатов вышедшего из строя компьютера, получив данные к его офлайн реестру. Это позволит выгрузить все публичные части установленных на компьютере сертификатов.

Для экспорта закрытых ключей с офлайн компьютера можно использовать скрипт отсюда RecoverOfflineCertificate

По умолчанию диспетчер сертификатов Windows certmgr.msc отображает логическое представление хранилищ сертификатов. Чтобы показать физические хранилища сертификатов в консоли, нужно в меню выбрать View -> Options и включить опцию Physical certificate stores. Теперь в консоли отображается ключи сертификатов дополнительно сгруппированы по их месту хранения (реестр, локальный компьютер, смарт-карта и т.д.).

Физическое расположение сертификатов на компьютере

Перенос контейнеров закрытых ключей сертификатов Криптопро

Часто возникает вопросы с местом хранения ключей отечественного криптопровайдера Crypto Pro на компьютере. Закрытые ключи пользователя хранятся в ветке реестра вида HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\S-1-5-21-xxxxxxxxx , где S-1-5-21-xxxxxxxxx – SID пользователя владельца ключа.

Можно преобразовать SID пользователя в имя с помощью PowerShell.

Перенос контейнера закрытых ключей сертификатов КриптоПРО

Экспортировав эту ветку с компьютера и импортировав ее в аналогичную ветку на другой компьютер (но уже с SID-ом пользователя другого компьютера), можно перенести цифровую подпись в КриптоПро на другой компьютер. Также скопируйте сертификаты из каталога %APPDATA%\Microsoft\SystemCertificates\My на исходном компьютере в каталог %APPDATA%\Microsoft\SystemCertificates\My (уже целевого пользователя) на другом компьютере.


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)