Если вы являетесь системным администратором Windows, вам, возможно, приходилось работать с сертификатами Windows. Работа с сертификатами в Windows обычно является одним из дополнительных заданий, выполняемых администратором. С помощью менеджера сертификатов Windows вы можете справиться с этим!
Сертификаты известны своей сложностью и трудностью понимания, но в этой статье вы получите возможность узнать, что сертификаты в Windows не такие уж страшные!
В этой статье будет рассмотрена работа с сертификатами в Windows. Если вы хотите узнать больше о том, как работают сертификаты в общем, ознакомьтесь с сопутствующей статьей “Учебник по сертификатам X.509”.
Понимание хранилищ сертификатов
В менеджере сертификатов Windows все сертификаты находятся в логических хранилищах, называемых хранилищами сертификатов. Хранилища сертификатов – это “ведра”, в которых Windows хранит все установленные сертификаты, и сертификат может присутствовать в нескольких хранилищах.
К сожалению, хранилища сертификатов не являются самым интуитивно понятным концептом для работы. Ниже вы узнаете, как отличать эти хранилища и как работать с ними.
Каждое хранилище находится в реестре Windows и на файловой системе. Для получения подробной информации обратитесь к таблице ниже. При работе с сертификатом в хранилище вы работаете с логическим хранилищем; вы не изменяете реестр или файловую систему непосредственно. Этот более простой подход позволяет вам работать с одним объектом, в то время как Windows самостоятельно обрабатывает представление этого объекта на диске.
Иногда вы увидите, что хранилища сертификатов называют физическими или логическими хранилищами. Физические хранилища относятся к фактическому файловой системе или расположению в реестре, где хранятся ключи реестра и/или файлы. Логические хранилища – это динамические ссылки, которые ссылается на одно или несколько физических хранилищ. Логические хранилища гораздо проще в использовании, чем физические хранилища для большинства распространенных случаев.
Windows хранит сертификаты в двух разных областях – контексте пользователя и компьютера. Сертификат помещается в один из этих двух контекстов в зависимости от того, должен ли сертификат использоваться одним пользователем, несколькими пользователями или самим компьютером. В остальной части этой статьи сертификат в контексте пользователя и компьютера будет неформально называться пользовательскими сертификатами и компьютерными сертификатами.
Пользовательские сертификаты
Если вы планируете использовать сертификат одним пользователем, то идеальным вариантом будет хранилище пользовательских сертификатов в менеджере сертификатов Windows. Это общий случай использования процессов аутентификации на основе сертификатов, таких как проводная IEEE 802.1x.
Пользовательские сертификаты находятся внутри профиля текущего пользователя и логически отображаются только в контексте этого пользователя. Пользовательские сертификаты “отображаются” и являются уникальными для каждого пользователя, даже на одной и той же системе.
Компьютерные сертификаты
Если сертификат будет использоваться всеми пользователями на компьютере или процессом системы, его следует поместить в хранилище в контексте компьютера. Например, если сертификат будет использоваться на веб-сервере для шифрования коммуникации для всех клиентов, размещение сертификата в хранилище в контексте компьютера было бы идеальным.
Вы увидите, что хранилище сертификатов компьютера логически отображается для всех контекстов пользователя. Это позволяет использовать сертификаты в хранилище сертификатов компьютера всем пользователям в зависимости от настроенных разрешений для закрытого ключа.
Для получения дополнительной информации о закрытых ключах, обязательно ознакомьтесь с статьей Руководство системного администратора по сертификатам X.509.
Сертификаты компьютера находятся в реестре локальной машины и папке Program Data. Сертификаты пользователя находятся в реестре текущего пользователя и папке App Data. Ниже вы можете увидеть разбивку местоположения каждого типа хранилища в реестре и файловой системе.
Context | Registry Path | Explanation |
---|---|---|
User | HKCU:\SOFTWARE\Microsoft\SystemCertificates\ | Physical store for user-specific public keys |
User | HKCU:\SOFTWARE\Policies\Microsoft\SystemCertificates\ | Physical store for user-specific public keys installed by Active Directory (AD) Group Policy Objects (GPOs) |
Computer | HKLM:\SOFTWARE\Microsoft\SystemCertificates\ | Physical store for machine-wide public keys |
Computer | HKLM:\SOFTWARE\Microsoft\Cryptography\Services\ | Physical store for keys associated with a specific service |
Computer | HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ | Physical store for machine-wide public keys installed by GPOs |
Computer | HKLM:\SOFTWARE\Microsoft\EnterpriseCertificates\ | Physical store for machine-wide public keys installed by the Enterprise PKI Containers within an AD domain |
Context | File Location | Explanation |
---|---|---|
User | $env:APPDATA\Microsoft\SystemCertificates\ | Physical store for user-specific public keys and pointers to private keys |
User | $env:APPDATA\Microsoft\Crypto\ | Physical store for user-specific private key containers |
Computer | $env:ProgramData\Microsoft\Crypto\ | Physical store for machine-wide private key containers |
Предварительные требования
В остальной части этой статьи вы найдете несколько примеров взаимодействия с хранилищами сертификатов Windows. Чтобы воспроизвести эти примеры, убедитесь, что вы соответствуете следующим предварительным требованиям:
- Операционная система Windows Vista, Windows Server 2008 или более новая. Приведенные примеры используют Windows 10 Enterprise версии 1903.
- Знакомство с PowerShell. Хотя это необязательно, этот язык будет использоваться для ссылок на сертификаты, где это уместно. Все приведенные примеры созданы с помощью Windows PowerShell 5.1.
- Вам не потребуется устанавливать какие-либо специальные сертификаты для выполнения данной задачи, но использование самоподписанного сертификата может быть полезным.
Управление сертификатами в Windows
В Windows есть три основных способа управления сертификатами:
- Снимок MMC (Microsoft Management Console) “Сертификаты” (certmgr.msc)
- PowerShell
- Утилита командной строки
certutil
В этой статье вы узнаете, как управлять сертификатами с помощью снимка MMC “Сертификаты” и PowerShell. Если вы хотите узнать больше о том, как использовать certutil
, ознакомьтесь с документацией Microsoft.
PowerShell против менеджера сертификатов безопасности Windows
Поскольку сертификаты можно управлять несколькими способами в Windows, какой из них выбрать? Следует ли выбрать путь через графический интерфейс (MMC) или командную строку с помощью PowerShell?
Примечание: Эта статья актуальна как для менеджера сертификатов Windows 7, так и для менеджера сертификатов Windows 10.
Сначала рассмотрите жизненный цикл сертификата. Если вы собираетесь установить или удалить только один сертификат, то рекомендуется использовать MMC. Но если вам нужно управлять несколькими сертификатами или вы часто выполняете одну и ту же задачу, то рекомендуется использовать командную строку. Даже если вы не знаете, как писать сценарии PowerShell, стоит изучить эту возможность, если вам предстоит управлять множеством разных сертификатов.
Давайте сначала посмотрим, как найти установленные сертификаты в Windows, используя Менеджер сертификатов и PowerShell.
Использование Менеджера сертификатов Windows (certmgr.msc)
Для просмотра сертификатов с помощью ММС откройте Менеджер сертификатов, откройте меню “Пуск” и введите certmgr.msc. Это вызовет ММС сертификатов Windows. В этом начальном виде будет предоставлен обзор всех логических хранилищ, отображаемых в левом окне.
На скриншоте ниже выбрано логическое хранилище Доверенные корневые удостоверяющие центры .

Просмотр физических хранилищ
По умолчанию Менеджер сертификатов Windows не будет отображать фактические физические хранилища. Чтобы отобразить хранилища, щелкните Вид , а затем Параметры . Затем вы увидите варианты выбора для отображения физических хранилищ сертификатов. Включение этой опции упрощает идентификацию конкретных путей в Windows.

Теперь вы можете видеть дополнительные контейнеры, показанные в примере логического хранилища Доверенные корневые удостоверяющие центры . Сертификаты по-прежнему группируются относительно их логических хранилищ, но теперь вы можете видеть физическое хранилище, “Реестр”.

Изучение атрибутов в Менеджере сертификатов Windows
Когда вы просматриваете сертификаты с помощью ММС, вы можете видеть множество атрибутов сертификата. Например, вы, скорее всего, захотите выбрать конкретные сертификаты.
Самый простой способ выполнить это – сослаться на значение расширения Номер серии или Отпечаток сертификата. Если сертификат был подписан удостоверяющим центром (ЦУЦ), он будет иметь серийный номер при выдаче. Отпечаток вычисляется каждый раз при просмотре сертификата.
Некоторые атрибуты сертификата можно увидеть, открыв его в MMC, как показано ниже.

Важной особенностью является встроенный закрытый ключ. Сертификаты в Windows также могут иметь соответствующий закрытый ключ. Эти закрытые ключи хранятся в соответствующих физических хранилищах в виде зашифрованных файлов.
Чтобы быстро различить сертификат с закрытым ключом и без него, обратите внимание на значок сертификата. В менеджере сертификатов Windows, если значок выглядит просто как лист бумаги с лентой, то нет соответствующего закрытого ключа. Если сертификат имеет закрытый ключ, вы увидите значок ключа в MMC и ключ внизу вкладки “Общие” при открытии сертификата.

Использование PowerShell
Как и в MMC, вы также можете просматривать и управлять сертификатами с помощью PowerShell. Давайте сначала рассмотрим сертификаты в их физических хранилищах (реестре и файловой системе).
По физическому хранилищу
С помощью командлета PowerShell Get-ChildItem
вы можете перечислить все ключи и значения внутри родительского пути реестра HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates\.
Нижеприведенная команда перечислит все сертификаты, связанные с текущим пользователем, в логическом хранилище Промежуточные удостоверяющие центры.
Каждая запись в реестре соответствует отпечатку сертификата доверенного центра сертификации и самому сертификату в соответствующем свойстве. Пример вывода представлен ниже.

Еще одно распространенное хранилище – это Личное хранилище. Ваши сертификаты для этого хранилища находятся в файловой системе, а не в реестре. В следующих командах мы покажем эти различные физические пути и их назначение.
Каждый файл в каталоге, возвращаемом командой ниже, соответствует установленному в Личном хранилище текущего пользователя сертификату.
Каждый файл, возвращаемый командой ниже, является ссылкой на объект для созданного провайдером хранилища ключей (KSP) закрытого ключа. Имя файла соответствует идентификатору ключа субъекта сертификата. Каждому установленному закрытому ключу будет добавлен соответствующий файл.
Каждый файл в каталоге, возвращаемом командой ниже, является уникальным контейнером для зашифрованного закрытого ключа, созданного KSP. Между именем файла и сертификатом нет прямой связи, но файл является целью указателя в предыдущей команде.
По логическому хранилищу.
Поскольку работа с сертификатами по их физическим путям не является обычной, вы будете работать со логическими хранилищами для остальных примеров.
PowerShell может получить доступ к логическим хранилищам Windows с помощью Cert:
PSDrive. PSDrive Cert:
отображает сертификаты на физические хранилища, подобно MMC.
К сожалению, MMC и PSDrive Cert
используют разные метки для логических хранилищ. Ниже приведена таблица сравнения общих хранилищ и их названий в MMC и PSDrive Cert
.
Cert: | Certificates MMC |
---|---|
My | Personal |
Remote Desktop | Remote Desktop |
Root | Trusted Root Certification Authorities |
CA | Intermediate Certification Authorities |
AuthRoot | Third-Party Root Certification Authorities |
TrustedPublisher | Trusted Publishers |
Trust | Enterprise Trust |
UserDS | Active Directory User Object |
Выбор сертификатов
При работе с сертификатами вам потребуется способ фильтрации и выбора сертификатов для выполнения определенных операций. В большинстве случаев вы будете фильтровать и выбирать сертификаты на основе значения определенного расширения.
Для следующих примеров вам необходимо начать с перечисления всех установленных сертификатов в хранилище корневого ЦС.
Возвращаемые объекты будут объектами сертификатов, которые вы можете использовать в следующих примерах.
Общие расширения уже доступны в виде свойств объектов сертификатов. В следующем примере вы используете Get-Member
, чтобы перечислить все свойства возвращаемых объектов.

Как видно на рисунке 9, некоторые из этих расширений, например, Издатель, полезны для поиска нужного сертификата. Расширения предоставляют информацию о сертификате, такую как кому он выдан, для чего он может использоваться и какие ограничения на него накладываются.
В более сложных случаях вам может потребоваться найти сертификаты по другим расширениям, например, используемым шаблоном сертификата. Сложность заключается в том, что значения для этих расширений возвращаются в виде массива целых чисел. Эти целые числа соответствуют кодированному содержимому ASN.1.
Существующие свойства ScriptProperties, доступные в объекте, показывают примеры взаимодействия с ними. В следующей команде вы вручную получите использование ключа, чтобы увидеть это отношение.
Новая составляющая, которую мы вводим в предыдущей команде, – это метод format, который выполняет декодирование ASN.1. Вы передаете ему булевое значение (например, $true) выше, чтобы определить, хотим ли мы, чтобы возвращаемый объект был однострочным или многострочным.
В следующей команде вы будете использовать значение отпечатка (Thumbprint) из сертификата на рисунке 7. Значение отпечатка устанавливается как переменная PowerShell и используется для выбора конкретного сертификата в следующих командах.
Создание самоподписанных сертификатов с помощью PowerShell
PowerShell может создавать самоподписанные сертификаты с помощью командлета New-SelfSignedCertificate
. Самоподписанные сертификаты полезны для тестирования, так как позволяют генерировать пару открытого и закрытого ключей без использования ЦС.
Теперь давайте создадим самоподписанный сертификат в хранилищах текущего пользователя и локальной машины, чтобы использовать их в примерах для следующих шагов.
В приведенном ниже примере PowerShell генерирует пару открытого и закрытого ключей, самоподписанный сертификат и устанавливает их в соответствующие хранилища сертификатов.
Использование самоподписанных сертификатов для производственных услуг не рекомендуется, так как все механизмы, основанные на доверии, не существуют.
Импорт/экспорт сертификатов
Криптография на основе открытых ключей фундаментально базируется на широком доступе к открытому ключу. Имея это в виду, вам нужны стандартные способы эффективного обмена сертификатами. Также важна безопасность ваших приватных ключей. Хранение приватных ключей на недоступных носителях информации или с использованием средств аварийного восстановления является распространенной практикой для определенных приватных ключей.
Оба этих случая требуют способов хранения этих криптографических объектов в стандартных форматах. Экспорт обеспечивает функции сохранения этих объектов и гарантирует их использование в широко принятых стандартных форматах файлов. Импорт позволяет вам привносить криптографические объекты в операционные системы Windows.
Использование менеджера сертификатов Windows (certmgr.msc)
Экспорт сертификатов из MMC относительно прост. Чтобы экспортировать сертификат без приватного ключа, щелкните на сертификате в MMC, перейдите в меню Все задачи и затем в Экспорт.
Во время экспорта вам будет предложено выбрать формат файла, как показано ниже. Самые распространенные варианты – DER или кодированный в формате Base-64.

Экспорт приватных ключей
Чтобы экспортировать сертификат с соответствующим приватным ключом, необходимо соблюсти два условия: учетная запись, под которой вы вошли в систему, должна иметь разрешение на использование приватного ключа (только для компьютерных сертификатов), и приватный ключ должен быть отмечен как экспортируемый.
Для проверки разрешений на личные ключи локального компьютера вы можете выбрать сертификат с личным ключом, выбрать Все задачи и Управление личными ключами в MMC сертификатов. Открывшееся диалоговое окно покажет записи контроля доступа для личных ключей.

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

При экспорте личного ключа в Windows вы можете сохранять файлы только в формате PFX. Эти типы файлов и форматы кодирования подробно описаны в этом посте.
Для остальных параметров, отображаемых в мастере экспорта, можно использовать значения по умолчанию. В таблице ниже кратко описаны эти параметры.
Setting | Description |
---|---|
Including all certificates in the certification path if possible | Helps with portability of certificate issuers, and includes all pertinent public keys in the PFX |
Delete the private key if the export is successful | Removes the private key from the file and has few common use cases, but one example is to test access to private keys |
Export all extended properties | Will include any extensions within the current certificate, these relate to the certificates [specific settings]( |
Enable certificate privacy | Normally only the private key will be encrypted in the exported PFX file, this setting encrypts the entire contents of the PFX file |
Group or user names | You can use a group or user security principal from Active Directory for encrypting the contents of the PFX file, but a password is the most portable option across legacy systems or computers not joined to the same domain |
Импортирование сертификатов
Функция импорта одинакова для всех поддерживаемых типов файлов сертификатов. Единственное отличие заключается в том, что если файл содержит личный ключ, вы можете “Отметить этот ключ как экспортируемый”, о чем вы узнаете подробнее ниже. Windows будет использовать Мастер импорта сертификатов.

При использовании Мастера импорта сертификатов для формата PFX вам потребуется указать пароль, использованный для шифрования личного ключа. Вот еще одно краткое описание параметров импорта.
Setting | Description |
---|---|
Enable strong private key protection | Requires a password for each access of a private key, be cautious of newer functions as they will not be supported in all software |
Mark this key as exportable | You should try to avoid using this setting on any end system, private keys should be treated similarly to storing passwords |
Protect private key using [virtualization-based security] | The setting provides more security functionality for protecting private keys from advanced malware attacks |
Include all extended properties | Relates to the same Windows-specific settings discussed as with exporting |
Сертификаты подписи кода PowerShell – хороший случай использования для защиты сильного закрытого ключа.
Автоматическое размещение сертификатов может вызывать осторожность. Вероятно, лучшие результаты будут при выборе сертификата вручную.
Используя PowerShell
Теперь, с помощью PowerShell экспортируйте один из ранее созданных самоподписанных сертификатов. В этом примере используется текущий пользователь, но вы можете использовать любой.
Ниже вы выбираете сертификат в логическом хранилище “Личное” текущего пользователя, который был самоподписанным, то есть где выпускающий лицо совпадает с субъектом.
Теперь, когда вы выбрали сертификат, вы можете использовать команду Export-Certificate
для сохранения файла в кодировке DER с помощью следующей команды.
Теперь давайте рассмотрим экспорт закрытого ключа. Ниже вы проверяете, что у выбранного вами сертификата есть закрытый ключ. Если это не верно, то команда Get-Item
вероятно выбрала неправильный сертификат.
Ниже вы установите пароль для шифрования закрытого ключа. Затем экспортируйте выбранный сертификат в файл PFX и используйте ранее введенный пароль для шифрования файла.
Аналогично экспорту, есть две команды. Одна команда для импорта сертификатов и одна для импорта файлов PFX.
Ниже приведена команда Import-Certificate
, которая импортирует ранее экспортированный файл в формате DER в личное хранилище текущего пользователя.
Предположим, вы также хотите установить закрытый ключ данного сертификата.
Имейте в виду, что пароль должен быть в формате Secure String. Кроме того, если вы импортируете в хранилище локальной машины (например, Cert:\LocalMachine\), вам потребуется запустить команду из поднятого административного промпта.
В приведенном выше примере также используется параметр Exportable с командой, который помечает закрытый ключ как экспортируемый в будущем. По умолчанию ключи не могут быть экспортированы. Экспортируемые закрытые ключи – это еще одно соображение безопасности, которое требует дополнительного внимания при их защите.
В Windows также есть много других вещей, которые можно делать с сертификатами, поэтому стоит исследовать больше.
Удаление сертификатов с помощью PowerShell
При удалении сертификатов нужно помнить, что корзины нет. Как только вы удалите сертификат, он исчезнет. Поэтому крайне важно убедиться, что вы удаляете правильный сертификат, проверив уникальный идентификатор, такой как серийный номер или отпечаток (Thumbprint).
Аналогично приведенному выше, в следующей команде мы выбираем самоподписанный сертификат из личного хранилища текущего пользователя.
Ниже вы можете увидеть отпечаток (Thumbprint), серийный номер (Serial Number) и свойства субъекта выбранного сертификата, чтобы убедиться, что это тот сертификат, который вы хотите выбрать.
Убедитесь, что вы выбрали правильный сертификат, который собираетесь удалить.
Нижеследующая команда удаляет все выбранные объекты сертификатов, используйте ее с осторожностью. Передавая объект $certificate
через конвейер в командлет Remove-Item
в нижеследующей команде, вы удалите все содержимое сертификата без запроса подтверждения.
Резюме
В этой статье вы работали с сертификатами в Windows, узнали, как получить доступ к ним и какие инструменты использовать при работе с ними. Есть еще многое, что можно изучить на эту тему, включая то, как связать установленные сертификаты с конкретными службами или даже как реализовать частную инфраструктуру открытых ключей (Public Key Infrastructure, PKI), развернув собственные центры сертификации (Certificate Authorities, CA).
Дополнительная информация
Source:
https://adamtheautomator.com/windows-certificate-manager/