Поставщик Certificate
Имя поставщика
Сертификат
Диски
Cert:
Возможности
ShouldProcess
Краткое описание
Предоставляет доступ к хранилищам сертификатов X.509 и сертификатам в PowerShell.
Подробное описание
Поставщик сертификатов PowerShell позволяет получать, добавлять, изменять, удалять и удалять сертификаты и хранилища сертификатов в PowerShell.
Диск сертификатов — это иерархическое пространство имен, содержащее хранилища cerificate и сертификаты на компьютере.
Поставщик сертификатов поддерживает следующие командлеты, которые рассматриваются в этой статье.
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
Типы, предоставляемые этим поставщиком
Диск сертификатов предоставляет следующие типы.
Расположения хранилищ (Microsoft.PowerShell.Commands.X509StoreLocation), которые представляют собой высокоуровневые контейнеры, которые группируют сертификаты для текущего пользователя и для всех пользователей. В каждой системе существует расположение хранилищ CurrentUser и LocalMachine (все пользователи).
Хранилища сертификатов (System.Security.Cryptography.X509Certificates.X509Store), которые являются физическими хранилищами, в которых сертификаты сохраняются и управляются.
Сертификаты X.509 System.Security.Cryptography.X509Certificates.X509Certificate2 , каждый из которых представляет сертификат X.509 на компьютере. Сертификаты идентифицируются по их отпечаткам.
Навигация по диску с сертификатом
Поставщик сертификатов предоставляет пространство имен сертификата в качестве Cert:
диска в PowerShell. Эта команда использует Set-Location
команду , чтобы изменить текущее расположение на корневое хранилище сертификатов в хранилище LocalMachine. Используйте обратную косую черту (\) или косую черту (/), чтобы указать уровень Cert:
диска.
Set-Location Cert:
Вы также можете работать с поставщиком сертификатов с любого другого диска PowerShell. Чтобы сослаться на псевдоним из другого Cert:
расположения, используйте имя диска в пути.
PS Cert:\> Set-Location -Path LocalMachine\Root
Чтобы вернуться к диску файловой системы, введите имя диска. Например, введите:
Set-Location C:
Примечание
PowerShell использует псевдонимы, чтобы обеспечить привычный способ работы с путями поставщика. Такие команды, как dir
и ls
теперь являются псевдонимами для Get-ChildItem, cd
являются псевдонимами для Set-Location. и pwd
является псевдонимом get-Location.
Отображение содержимого диска Cert:
В командлет диска добавлены Get-ChildItem
новые динамические Cert:
параметрыDnsName
, EKU
, SSLServerAuthentication
, и ExpiringInDays
. Новые динамические параметры доступны в Windows PowerShell 3.0 и более поздних выпусках PowerShell. Параметры поставщика работают с IIS 8.0 в Windows Server 2012 и более поздних версиях.
Эта команда использует Get-ChildItem
командлет для отображения хранилищ сертификатов в расположении хранилища сертификатов CurrentUser.
Если вы не находитесь на Cert:
диске, используйте абсолютный путь.
PS Cert:\CurrentUser\> Get-ChildItem
Отображение свойств сертификата на диске Cert:
Этот пример получает сертификат с Get-Item
и сохраняет его в переменной.
В примере показаны новые свойства скрипта сертификата (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) с помощью Select-Object
.
$c = Get-Item cert:\LocalMachine\My\52A149D0393CE8A8D4AF0B172ED667A9E3A1F44E
$c | Format-List DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer
DnsNameList : {SERVER01.contoso.com}
EnhancedKeyUsageList : {WiFi-Machine (1.3.6.1.4.1.311.42.2.6),
Client Authentication (1.3.6.1.5.5.7.3.2)}
SendAsTrustedIssuer : False
Поиск всех сертификатов CodeSigning
Эта команда использует параметры CodeSigningCert и Recurse командлета Get-ChildItem
для получения всех сертификатов на компьютере с центром подписывания кода.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Поиск сертификатов с истекшим сроком действия
Эта команда использует параметр ExpiringInDays командлета Get-ChildItem
для получения сертификатов, срок действия которых истекает в течение ближайших 30 дней.
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
Поиск SSL-сертификатов сервера
Эта команда использует параметр SSLServerAuthentication командлета Get-ChildItem
, чтобы получить все серверные SSL-сертификаты в хранилищах My и WebHosting.
Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
-SSLServerAuthentication
Поиск сертификатов с истекшим сроком действия на удаленных компьютерах
Эта команда использует Invoke-Command
командлет для выполнения Get-ChildItem
команды на компьютерах Srv01 и Srv02. Значение нуля (0) в параметре ExpiringInDays получает сертификаты на компьютерах Srv01 и Srv02 с истекшим сроком действия.
Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
-Recurse -ExpiringInDays 0}
Объединение фильтров для поиска определенного набора сертификатов
Эта команда получает все сертификаты в расположении хранилища LocalMachine со следующими атрибутами:
- "fabrikam" в dns-имени
- "Проверка подлинности клиента" в своем EKU
- значение
$true
для свойства SendAsTrustedIssuer - не истечет в течение следующих 30 дней.
Свойство NotAfter хранит дату окончания срока действия сертификата.
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
-EKU "*Client Authentication*" | Where-Object {
$_.SendAsTrustedIssuer -and `
$_.NotAfter -gt (get-date).AddDays.(30)
}
Открытие оснастки "Сертификаты" консоли MMC
Командлет Invoke-Item
будет использовать приложение по умолчанию для открытия указанного пути. Для сертификатов по умолчанию используется оснастка MMC "Сертификаты".
Эта команда открывает оснастку "Сертификаты" MMC для управления указанным сертификатом.
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
Копирование сертификатов
Копирование сертификатов не поддерживается поставщиком сертификатов . При попытке скопировать сертификат возникает эта ошибка.
$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider does not support
this operation.
At line:1 char:1
+ Copy-Item -Path $path -Destination .\CA\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Copy-Item],
PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,
Microsoft.PowerShell.Commands.CopyItemCommand
Перемещение сертификатов
Перемещение всех сертификатов проверки подлинности SSL-сервера в хранилище WebHosting
Эта команда использует Move-Item
командлет для перемещения сертификата из хранилища "Мое" в хранилище WebHosting.
Move-Item
не перемещает хранилища сертификатов и не перемещает сертификаты в другое расположение хранилища, например из LocalMachine в CurrentUser. Командлет Move-Item
перемещает сертификаты, но не перемещает закрытые ключи.
Эта команда использует параметр SSLServerAuthentication командлета Get-ChildItem
для получения сертификатов проверки подлинности SSL-сервера в хранилище сертификатов MY.
Возвращенные сертификаты передаются в Move-Item
командлет , который перемещает сертификаты в хранилище WebHosting.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
-Destination cert:\LocalMachine\WebHosting
Удаление сертификатов и закрытых ключей
Командлет Remove-Item
удалит указанные вами сертификаты. Динамический -DeleteKey
параметр удаляет закрытый ключ.
Удаление сертификата из хранилища ЦС
Эта команда удаляет сертификат из хранилища сертификатов центра сертификации, но не затрагивает связанный закрытый ключ.
Cert:
На диске Remove-Item
командлет поддерживает только параметры DeleteKey, Path, WhatIf и Confirm. Все остальные параметры игнорируются.
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
Удаление сертификата с помощью подстановочных знаков в DNS-имени
Эта команда удаляет все сертификаты с именем DNS, содержащим "Fabrikam". Он использует параметр DNSName командлета Get-ChildItem
для получения сертификатов и командлет для Remove-Item
их удаления.
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
Удаление закрытых ключей с удаленного компьютера
Эта серия команд включает делегирование, а затем удаляет сертификат и связанный закрытый ключ на удаленном компьютере. Чтобы удалить закрытый ключ на удаленном компьютере, необходимо использовать делегированные учетные данные.
Используйте командлет , Enable-WSManCredSSP
чтобы включить проверку подлинности поставщика службы безопасности учетных данных (CredSSP) на клиенте на удаленном компьютере S1.
CredSSP разрешает делегирование проверки подлинности.
Enable-WSManCredSSP -Role Client -DelegateComputer S1
Connect-WSMan
Используйте командлет , чтобы подключить компьютер S1 к службе WinRM на локальном компьютере. После выполнения этой команды компьютер S1 появится на локальном WSMan:
диске в PowerShell.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Теперь можно использовать командлет Set-Item на диске WSMan: , чтобы включить атрибут CredSSP для службы WinRM.
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
Запустите удаленный сеанс на компьютере s1 с помощью командлета New-PSSession
и укажите проверку подлинности CredSSP. Сохраняет сеанс в переменной $s
.
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
Наконец, используйте Invoke-Command
командлет для выполнения Remove-Item
команды в сеансе в переменной $s
. Команда Remove-Item
использует параметр DeleteKey для удаления закрытого ключа вместе с указанным сертификатом.
Invoke-Command -Session $s { Remove-Item `
-Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
-DeleteKey
}
Удаление просроченных сертификатов
Эта команда использует параметр ExpiringInDays командлета Get-ChildItem
со значением 0, чтобы получить сертификаты в хранилище WebHosting, срок действия которых истек.
Переменная, содержащая возвращенные сертификаты, передается в Remove-Item
командлет , который удаляет их. Команда использует параметр DeleteKey для удаления закрытого ключа вместе с сертификатом.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Создание сертификатов
Командлет New-Item
не создает новые сертификаты в поставщике сертификатов . Используйте командлет New-SelfSignedCertificate , чтобы создать сертификат для тестирования.
Создание хранилищ сертификатов
На диске New-Item
Cert: командлет создает хранилища сертификатов в расположении хранилища LocalMachine. Он поддерживает параметры Name, Path, WhatIf и Confirm . Все остальные параметры игнорируются. Команда возвращает объект System.Security.Cryptography.X509Certificates.X509Store , представляющий новое хранилище сертификатов.
Эта команда создает новое хранилище сертификатов с именем "CustomStore" в расположении хранилищ LocalMachine.
New-Item -Path cert:\LocalMachine\CustomStore
Create нового хранилища сертификатов на удаленном компьютере
Эта команда создает новое хранилище сертификатов с именем "HostingStore" в расположении хранилищ LocalMachine на компьютере Server01.
Команда использует Invoke-Command
командлет для выполнения New-Item
команды на компьютере Server01. Команда возвращает объект System.Security.Cryptography.X509Certificates.X509Store , представляющий новое хранилище сертификатов.
Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
-ComputerName Server01
Создание сертификатов клиента для WS-Man
Эта команда создает запись ClientCertificate , которую может использовать клиент WS-Management . Новый ClientCertificate будет отображаться в каталоге ClientCertificate как "ClientCertificate_1234567890". Все параметры являются обязательными. Издатель должен быть отпечатком сертификата издателя.
$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
-Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
-URI wmicimv2/* -Credential $cred
Удаление хранилищ сертификатов
Удаление хранилища сертификатов с удаленного компьютера
Эта команда использует Invoke-Command
командлет для выполнения Remove-Item
команды на компьютерах S1 и S2. Команда Remove-Item
включает параметр Recurse , который удаляет сертификаты в хранилище перед удалением хранилища.
Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
-ComputerName S1, S2
Динамические параметры
Динамические параметры — это параметры командлета, которые добавляются поставщиком PowerShell и доступны только при использовании командлета на диске с поддержкой поставщика. Эти параметры действительны во всех подкаталогах поставщика сертификатов, но действуют только для сертификатов.
Примечание
Параметры, выполняющие фильтрацию по свойству, EnhancedKeyUsageList
также возвращают элементы с пустым EnhancedKeyUsageList
значением свойства.
Сертификаты с пустым элементом EnhancedKeyUsageList можно использовать для любых целей.
Строка ItemType <>
Этот параметр позволяет указать тип элемента, созданного .New-Item
Certificate
На диске допускаются следующие значения:
- Поставщик Certificate
- Сертификат
- Магазин
- StoreLocation
Поддерживаемые командлеты
CodeSigningCert <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Этот параметр получает сертификаты, у которых в значении свойства EnhancedKeyUsageList есть "Подписывание кода".
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Поддерживаемые командлеты
Этот параметр получает сертификаты, имеющие указанное доменное имя или шаблон имени в свойстве DNSNameList сертификата. Значение этого параметра может быть равно "Юникод" или "ASCII". Значения Punycode преобразуются в формат Юникода. Допускается использование подстановочных знаков (*).
Этот параметр впервые появился в Windows PowerShell 3.0.
EKU <System.String>
Поддерживаемые командлеты
Этот параметр получает сертификаты, имеющие указанный текст или текстовый EnhancedKeyUsageList
шаблон в свойстве сертификата. Допускается использование подстановочных знаков (*). Свойство EnhancedKeyUsageList
содержит понятное имя и поля OID EKU.
Этот параметр впервые появился в Windows PowerShell 3.0.
ExpiringInDays <System.Int32>
Поддерживаемые командлеты
Этот параметр получает сертификаты, срок действия которых истекает в течение указанного числа дней или раньше. Значение 0 (нуль) возвращает сертификаты, срок действия которых истек.
Этот параметр впервые появился в Windows PowerShell 3.0.
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Возвращает только сертификаты сервера для размещения веб-сайтов SSL. Этот параметр получает сертификаты, имеющие EnhancedKeyUsageList
значение свойства "Проверка подлинности сервера".
Этот параметр впервые появился в Windows PowerShell 3.0.
DeleteKey <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Этот параметр удаляет связанный закрытый ключ при удалении сертификата.
Важно!
Чтобы удалить закрытый ключ, связанный с сертификатом пользователя в Cert:\CurrentUser
хранилище на удаленном компьютере, необходимо использовать делегированные учетные данные. Командлет Invoke-Command
поддерживает делегирование учетных данных с помощью параметра CredSSP . Перед использованием Remove-Item
с Invoke-Command
делегированием учетных данных и следует учитывать все риски безопасности.
Этот параметр впервые появился в Windows PowerShell 3.0.
Свойства сценариев
В объект x509Certificate2 , представляющий сертификаты, добавлены новые свойства скрипта, чтобы упростить поиск сертификатов и управление ими.
DnsNameList
: для заполненияDnsNameList
свойства поставщик сертификата копирует содержимое из записи DNSName в расширении SubjectAlternativeName (SAN). Если расширение SAN пусто, свойство заполняется содержимым из поля Subject сертификата.EnhancedKeyUsageList
: чтобы заполнитьEnhancedKeyUsageList
свойство , поставщик сертификата копирует свойства OID поля EnhancedKeyUsage (EKU) в сертификате и создает для него понятное имя.SendAsTrustedIssuer
: для заполненияSendAsTrustedIssuer
свойства поставщик сертификата копируетSendAsTrustedIssuer
свойство из сертификата. Дополнительные сведения см. в статье Управление доверенными издателями для проверки подлинности клиента.
Эти новые функции позволяют выполнять поиск сертификатов на основе их DNS-имен и дат истечения срока действия сертификатов и различать сертификаты проверки подлинности клиента и сервера по значению свойств расширенного использования ключа (EKU).
Использование конвейера
Командлеты поставщика принимают входные данные конвейера. Конвейер можно использовать для упрощения задачи, отправляя данные поставщика из одного командлета в другой. Дополнительные сведения об использовании конвейера с командлетами поставщика см. в справочниках по командлетам, приведенным в этой статье.
Получение справки
Начиная с Windows PowerShell 3.0, стали доступны настраиваемые разделы справки по командлетам поставщика, в которых объясняется поведение этих командлетов на диске файловой системы.
Чтобы получить разделы справки, настроенные для диска файловой системы, выполните команду Get-Help на диске файловой системы или используйте -Path
параметр Get-Help , чтобы указать диск файловой системы.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: