о поставщике сертификатов
Имя провайдера
Сертификат
Диски
Cert:Возможности
ДолженОбработать
Краткое описание
Предоставляет доступ к хранилищам сертификатов X.509 и сертификатам в PowerShell.
Подробное описание
Эта информация относится только к PowerShell, работающему в Windows.
Поставщик Certificate PowerShell позволяет получать, добавлять, изменять, очищать и удалять сертификаты и хранилища сертификатов в PowerShell.
Диск Сертификат — это иерархическое пространство имен, содержащее хранилища сертификатов и сертификаты на вашем компьютере.
Поставщик Certificate поддерживает следующие командлеты.
- 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 на компьютере. Сертификаты идентифицируются по отпечаткам пальцев.
Навигация по диску сертификатов
Поставщик Certificate предоставляет пространство имен сертификата как диск 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.
Отображение содержимого диска Cert:
Эта команда использует командлет 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-имениАутентификация клиентав его 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
Копирование сертификатов
Копирование сертификатов не поддерживается поставщиком Certificate. При попытке скопировать сертификат вы видите эту ошибку.
$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-сервера в хранилище веб-хостинга.
Эта команда использует командлет 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 удаляет закрытый ключ.
Удаление сертификата из хранилища CA
Эта команда удаляет сертификат из хранилища сертификатов CA, но оставляет связанный с ним закрытый ключ нетронутым.
На диске Cert: командлет Remove-Item поддерживает только DeleteKey, Path, WhatIf. и параметры Подтвердить. Все остальные параметры игнорируются.
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
}
Удалить сертификаты с истекшим сроком действия
Эта команда использует параметр ExpiringInDays командлета Get-ChildItem со значением 0 для получения сертификатов в WebHosting. > хранить, срок годности которых истек.
Переменная, содержащая возвращенные сертификаты, передается по конвейеру командлету Remove-Item, который удаляет их. Команда использует параметр DeleteKey для удаления закрытого ключа вместе с сертификатом.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Создание сертификатов
Командлет New-Item не создает новые сертификаты в поставщике Certificate. Используйте командлет 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 и доступны только тогда, когда командлет используется на диске с поддержкой поставщика. Эти параметры действительны во всех подкаталогах поставщика Certificate, но действуют только для сертификатов.
Примечание
Параметры, выполняющие фильтрацию по свойству EnhancedKeyUsageList, также возвращают элементы с пустым значением свойства EnhancedKeyUsageList. Сертификаты с пустым EnhancedKeyUsageList можно использовать для любых целей.
Следующие параметры поставщика сертификатов были повторно представлены в PowerShell 7.1.
- DNSName
- DocumentEncryptionCert
- ЭКУ
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert
Поддерживаемые командлеты
- Get-Item
- Get-ChildItem
Этот параметр получает сертификаты, у которых есть Code Signing в значении свойства EnhancedKeyUsageList.
DeleteKey
Поддерживаемые командлеты
- Remove-Item
Этот параметр удаляет связанный закрытый ключ при удалении сертификата.
Это важно
Чтобы удалить закрытый ключ, связанный с сертификатом пользователя в хранилище Cert:\CurrentUser на удаленном компьютере, необходимо использовать делегированные учетные данные. Командлет Invoke-Command поддерживает делегирование учетных данных с помощью параметра CredSSP. Вам следует учитывать любые риски безопасности, прежде чем использовать Remove-Item с Invoke-Command и делегированием учетных данных.
Этот параметр был вновь введен в PowerShell 7.1.
DnsName
Поддерживаемые командлеты
- Get-ChildItem
Этот параметр получает сертификаты, которые имеют указанное доменное имя или шаблон имени в свойстве DNSNameList сертификата. Значением этого параметра может быть либо Unicode, либо ASCII. Значения Punycode преобразуются в Unicode. Допускаются подстановочные знаки (*).
Этот параметр был вновь введен в PowerShell 7.1.
DocumentEncryptionCert
Поддерживаемые командлеты
- Get-Item
- Get-ChildItem
Этот параметр получает сертификаты, у которых есть Document Encryption в значении свойства EnhancedKeyUsageList.
ЭКУ
Поддерживаемые командлеты
- Get-ChildItem
Этот параметр получает сертификаты, имеющие указанный текст или текстовый шаблон в свойстве EnhancedKeyUsageList сертификата. Допускаются подстановочные знаки (*). Свойство EnhancedKeyUsageList содержит понятное имя и поля OID EKU.
Этот параметр был вновь введен в PowerShell 7.1.
ExpiringInDays
Поддерживаемые командлеты
- Get-ChildItem
Этот параметр получает сертификаты, срок действия которых истекает через указанное количество дней или раньше. Значение 0 (0) присваивает сертификаты, срок действия которых истек.
Этот параметр был вновь введен в PowerShell 7.1.
ItemType
Этот параметр используется для указания типа элемента, созданного с помощью New-Item. Командлет New-Item поддерживает только значение Store. Командлет New-Item не может создавать новые сертификаты.
Поддерживаемые командлеты
- New-Item
SSLServerAuthentication
Поддерживаемые командлеты
- Get-ChildItem
Получает только сертификаты сервера для веб-хостинга SSL. Этот параметр получает сертификаты, у которых есть Аутентификация сервера в значении свойства EnhancedKeyUsageList.
Этот параметр был вновь введен в PowerShell 7.1.
Свойства скрипта
К объекту x509Certificate2, представляющему сертификаты, были добавлены новые свойства сценария, что упрощает поиск сертификатов и управление ими.
- DnsNameList: чтобы заполнить свойство DnsNameList, поставщик сертификатов копирует содержимое из записи DNSName в расширении subjectAlternativeName (SAN). Если расширение SAN пусто, свойство заполняется содержимым из поля «Субъект» сертификата.
- EnhancedKeyUsageList: чтобы заполнить свойство EnhancedKeyUsageList, поставщик сертификатов копирует свойства OID поля EnhancedKeyUsage (EKU) в сертификате и создает для него понятное имя.
- SendAsTrustedIssuer: чтобы заполнить свойство SendAsTrustedIssuer, поставщик сертификатов копирует свойство SendAsTrustedIssuer из сертификата. Дополнительные сведения см. в разделе Управление доверенными эмитентами для аутентификации клиентов.
Эти новые функции позволяют искать сертификаты по их DNS-именам и срокам действия, а также различать сертификаты проверки подлинности клиента и сервера по значению их свойств Enhanced Key Usage (EKU).
Использование конвейера
Командлеты поставщика принимают входные данные конвейера. Вы можете использовать конвейер для упрощения задач, отправляя данные поставщика из одного командлета в другой командлет поставщика. Чтобы узнать больше о том, как использовать конвейер с командлетами поставщика, см. ссылки на командлеты, приведенные в этой статье.
Получение помощи
Начиная с PowerShell 3.0, вы можете получить настраиваемые разделы справки для командлетов поставщика, в которых объясняется, как эти командлеты ведут себя на диске файловой системы.
Чтобы получить разделы справки, настроенные для диска с файловой системой, запустите команду Get-Help на диске с файловой системой или используйте параметр -Path команды Get-Help, чтобы укажите диск с файловой системой.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:
См. также
- about_Providers
- about_Signing
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
- Get-PfxCertificate