about_Certificate_Provider
Имя поставщика
Сертификат
Диски
Cert:
Возможности
ShouldProcess
Краткое описание
Предоставляет доступ к хранилищам сертификатов X.509 и сертификатам в PowerShell.
Подробное описание
Эта информация относится только к PowerShell, работающей в Windows.
Поставщик сертификатов PowerShell позволяет получать, добавлять, изменять, очищать и удалять сертификаты и хранилища сертификатов в PowerShell.
Диск сертификата — это иерархическое пространство имен, содержащее хранилища сертификатов и сертификаты на компьютере.
Поставщик сертификатов поддерживает следующие командлеты.
- 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, которые являются физическими хранилищами, в которых сохраняются и управляются сертификаты.
- System.Security.Cryptography.X509Certificates.X509Certificate2, каждый из которых представляет сертификат X.509 на компьютере. Сертификаты идентифицируются по их отпечаткам.
Навигация по диску сертификата
Поставщик сертификатов предоставляет пространство имен сертификата в качестве Cert:
диска в PowerShell. Эта команда использует Set-Location
команду для изменения текущего Root
расположения в хранилище сертификатов в расположении 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.
Отображение содержимого сертификата: диск
Эта команда использует 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
хранилищах.
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
Поиск сертификатов с истекшим сроком действия на удаленных компьютерах
Эта команда использует Invoke-Command
командлет для выполнения Get-ChildItem
команды на компьютерах Srv01 и Srv02. Значение нуля (0
) в параметре ExpiringInDays получает сертификаты на компьютерах Srv01 и Srv02 с истекшим сроком действия.
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
Объединение фильтров для поиска определенного набора сертификатов
Эта команда получает все сертификаты в LocalMachine
расположении хранилища, имеющие следующие атрибуты:
fabrikam
в dns-имениClient Authentication
в своем EKU- значение
$true
свойства SendAsTrustedIssuer - Не истекает срок действия в течение следующих 30 дней.
Свойство NotAfter сохраняет дату окончания срока действия сертификата.
[DateTime] $ValidThrough = (Get-Date) + (New-TimeSpan -Days 30)
$getChildItemSplat = @{
Path = 'cert:\*'
Recurse = $true
DnsName = "*fabrikam*"
Eku = "*Client Authentication*"
}
Get-ChildItem @getChildItemSplat |
Where-Object {$_.SendAsTrustedIssuer -and $_.NotAfter -gt $ValidThrough }
Открытие оснастки "Сертификаты" консоли 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 doesn't 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
командлет для перемещения сертификата из My
хранилища в 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 {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Удаление сертификатов с истекшим сроком действия
Эта команда использует параметр Get-ChildItem
ExpiringInDays командлета со значением 0
получения сертификатов в WebHosting
хранилище, срок действия которого истек.
Переменная, содержащая возвращенные сертификаты, отправляется командлету Remove-Item
, который удаляет их. Команда использует параметр DeleteKey для удаления закрытого ключа вместе с сертификатом.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Создание сертификатов
Командлет New-Item
не создает новые сертификаты в поставщике сертификатов . Используйте командлет New-SelfSignedCertificate для создания сертификата для тестирования.
Создание хранилищ сертификатов
Cert:
На диске New-Item
командлет создает хранилища сертификатов в расположении LocalMachine
хранилища. Он поддерживает параметры Name, Path, WhatIf и Confirm . Все остальные параметры игнорируются. Команда возвращает system.Security.Cryptography.X509Certificates.X509Store , представляющую новое хранилище сертификатов.
Эта команда создает новое хранилище сертификатов с именем CustomStore
в расположении LocalMachine
хранилища.
New-Item -Path cert:\LocalMachine\CustomStore
Создание хранилища сертификатов на удаленном компьютере
Эта команда создает новое хранилище сертификатов с именем HostingStore
в LocalMachine
расположении хранилища на компьютере Server01.
Команда использует Invoke-Command
командлет для выполнения New-Item
команды на компьютере Server01. Команда возвращает system.Security.Cryptography.X509Certificates.X509Store , представляющую новое хранилище сертификатов.
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
Создание сертификатов клиента для WS-Man
Эта команда создает запись ClientCertificate , которая может использоваться клиентом WS-Management . Новый ClientCertificate отображается в каталоге ClientCertificate как ClientCertificate_1234567890
. Все параметры являются обязательными. Издатель должен быть отпечатком сертификата издателя.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
Удаление хранилищ сертификатов
Удаление хранилища сертификатов с удаленного компьютера
Эта команда использует Invoke-Command
командлет для выполнения Remove-Item
команды на компьютерах S1 и S2. Команда Remove-Item
включает параметр Recurse , который удаляет сертификаты в хранилище перед удалением хранилища.
Invoke-Command -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
Динамические параметры
Динамические параметры — это параметры командлета, добавленные поставщиком PowerShell, и доступны только в том случае, если командлет используется на диске с поддержкой поставщика. Эти параметры допустимы во всех подкаталогах поставщика сертификатов, но эффективны только для сертификатов.
Примечание.
Параметры, выполняющие фильтрацию по свойству EnhancedKeyUsageList, также возвращают элементы с пустым значением свойства EnhancedKeyUsageList. Сертификаты с пустым расширенным списком расширенных ключей можно использовать для всех целей.
Следующие параметры поставщика сертификатов были повторно введены в PowerShell 7.1.
- DNSName
- DocumentEncryptionCert
- EKU
- Истекает срок действияInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Этот параметр получает сертификаты, имеющиеся Code Signing
в значении свойства EnhancedKeyUsageList .
DeleteKey <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Этот параметр удаляет связанный закрытый ключ при удалении сертификата.
Внимание
Чтобы удалить закрытый ключ, связанный с сертификатом пользователя в Cert:\CurrentUser
хранилище на удаленном компьютере, необходимо использовать делегированные учетные данные. Командлет поддерживает делегирование Invoke-Command
учетных данных с помощью параметра CredSSP . Перед использованием Remove-Item
и Invoke-Command
делегированием учетных данных следует учитывать любые риски безопасности.
Этот параметр был повторно введен в PowerShell 7.1
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Поддерживаемые командлеты
Этот параметр получает сертификаты, имеющие указанное доменное имя или шаблон имени в свойстве DNSNameList сертификата. Значение этого параметра может быть Unicode
или ASCII
. Значения Punycode преобразуются в формат Юникода. Разрешены подстановочные знаки (*
).
Этот параметр был повторно введен в PowerShell 7.1
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Этот параметр получает сертификаты, имеющиеся Document Encryption
в значении свойства EnhancedKeyUsageList .
EKU <System.String>
Поддерживаемые командлеты
Этот параметр получает сертификаты с указанным текстом или текстовым шаблоном в свойстве EnhancedKeyUsageList сертификата. Разрешены подстановочные знаки (*
). Свойство EnhancedKeyUsageList содержит понятное имя и поля OID для EKU.
Этот параметр был повторно введен в PowerShell 7.1
ExpiringInDays <System.Int32>
Поддерживаемые командлеты
Этот параметр получает сертификаты, срок действия которых истекает или до указанного количества дней. Значение нуля (0) получает сертификаты, истекшие.
Этот параметр был повторно введен в PowerShell 7.1
ItemType <System.String>
Этот параметр используется для указания типа элемента, созданного с помощью New-Item
. Командлет New-Item
поддерживает только значение Store
. New-Item
командлет не может создавать новые сертификаты.
Поддерживаемые командлеты
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Поддерживаемые командлеты
Возвращает только сертификаты сервера для размещения веб-сайтов SSL. Этот параметр получает сертификаты, имеющиеся Server Authentication
в значении свойства EnhancedKeyUsageList .
Этот параметр был повторно введен в PowerShell 7.1
Свойства скрипта
Новые свойства скрипта были добавлены в объект x509Certificate2 , представляющий сертификаты, чтобы упростить поиск сертификатов и управление ими.
- DnsNameList. Чтобы заполнить свойство DnsNameList, поставщик сертификатов копирует содержимое из записи DNSName в расширении SubjectAlternativeName (SAN). Если расширение SAN пусто, свойство заполняется содержимым из поля Subject сертификата.
- EnhancedKeyUsageList. Чтобы заполнить свойство EnhancedKeyUsageList, поставщик сертификатов копирует свойства OID поля EnhancedKeyUsage (EKU) в сертификате и создает понятное имя для него.
- SendAsTrustedIssuer: Чтобы заполнить свойство SendAsTrustedIssuer , поставщик сертификатов копирует свойство SendAsTrustedIssuer из сертификата. Дополнительные сведения см. в разделе "Управление доверенными издателями для проверки подлинности клиента".
Эти новые функции позволяют выполнять поиск сертификатов на основе их DNS-имен и дат истечения срока действия сертификатов и различать сертификаты проверки подлинности клиента и сервера по значению свойств расширенного использования ключа (EKU).
Использование конвейера
Командлеты поставщика принимают входные данные конвейера. Конвейер можно использовать для упрощения задач, отправляя данные поставщика из одного командлета в другой командлет поставщика. Дополнительные сведения об использовании конвейера с командлетами поставщика см. в приведенных в этой статье ссылок на командлеты.
Получение справки
Начиная с PowerShell 3.0, вы можете получить настраиваемые разделы справки для командлетов поставщика, которые объясняют поведение этих командлетов на диске файловой системы.
Чтобы получить разделы справки, настроенные для диска файловой системы, выполните команду Get-Help на диске файловой системы или используйте -Path
параметр Get-Help
для указания диска файловой системы.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:
См. также
PowerShell