about_Certificate_Provider

Имя поставщика

Сертификат

Drives

Cert:

Capabilities

ShouldProcess

Краткое описание

Предоставляет доступ к хранилищам сертификатов X.509 и сертификатам в PowerShell.

Подробное описание

Эта информация относится только к PowerShell, работающей в Windows.

Поставщик сертификата PowerShell позволяет получать, добавлять, изменять, удалять сертификаты и хранилища сертификатов в PowerShell.

Диск сертификата — это иерархическое пространство имен, содержащее хранилища сертификатов и сертификаты на компьютере.

Поставщик сертификатов поддерживает следующие командлеты.

Типы, предоставляемые этим поставщиком

Диск сертификата предоставляет следующие типы.

  • 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.

Отображение содержимого диска 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-имени
  • 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 certificates для управления указанным сертификатом.

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и Подтвердить параметры. Все остальные параметры игнорируются.

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 не создает новые сертификаты в поставщике сертификатов . Используйте командлет New-SelfSignedCertificate, чтобы создать сертификат для тестирования.

Создание хранилищ сертификатов

На диске Cert: командлет New-Item создает хранилища сертификатов в расположении хранилища LocalMachine. Он поддерживает имени, пути, WhatIfи подтвердить параметры. Все остальные параметры игнорируются. Команда возвращает 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. Сертификаты с пустым EnhancedKeyUsageList можно использовать для всех целей.

Следующие параметры поставщика сертификатов были повторно введены в PowerShell 7.1.

  • DNSName
  • DocumentEncryptionCert
  • EKU
  • истекает срок действия InDays
  • SSLServerAuthentication

CodeSigningCert <System.Management.Automation.SwitchParameter>

Поддерживаемые командлеты

Этот параметр получает сертификаты, имеющие Code Signing в значении свойства EnhancedKeyUsage List.

DeleteKey <System.Management.Automation.SwitchParameter>

Поддерживаемые командлеты

Этот параметр удаляет связанный закрытый ключ при удалении сертификата.

Важный

Чтобы удалить закрытый ключ, связанный с сертификатом пользователя в хранилище Cert:\CurrentUser на удаленном компьютере, необходимо использовать делегированные учетные данные. Командлет Invoke-Command поддерживает делегирование учетных данных с помощью параметра CredSSP. Перед использованием Remove-Item с Invoke-Command и делегированием учетных данных следует учитывать любые риски безопасности.

Этот параметр был повторно введен в PowerShell 7.1

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

Поддерживаемые командлеты

Этот параметр получает сертификаты, имеющие указанное доменное имя или шаблон имени в свойстве DNSNameList сертификата DNSNameList. Значение этого параметра может быть Unicode или ASCII. Значения Punycode преобразуются в Юникод. Разрешены подстановочные знаки (*).

Этот параметр был повторно введен в PowerShell 7.1

DocumentEncryptionCert <System.Management.Automation.SwitchParameter>

Поддерживаемые командлеты

Этот параметр получает сертификаты, имеющие Document Encryption в значении свойства EnhancedKeyUsage List.

<< EKU System.String

Поддерживаемые командлеты

Этот параметр получает сертификаты с указанным текстом или текстовым шаблоном в свойстве EnhancedKeyUsageList сертификата. Разрешены подстановочные знаки (*). Свойство EnhancedKeyUsageList содержит понятное имя и поля идентификатора EKU.

Этот параметр был повторно введен в PowerShell 7.1

Истекает срок действия <System.Int32>

Поддерживаемые командлеты

Этот параметр получает сертификаты, срок действия которых истекает или до указанного количества дней. Значение нуля (0) получает сертификаты, истекшие.

Этот параметр был повторно введен в PowerShell 7.1

ЭлементType <System.String>

Этот параметр используется для указания типа элемента, созданного New-Item. Командлет New-Item поддерживает только значение Store. командлет New-Item не может создавать новые сертификаты.

Поддерживаемые командлеты

  • нового элемента

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

Поддерживаемые командлеты

Получает только сертификаты сервера для веб-размещения SSL. Этот параметр получает сертификаты, имеющие Server Authentication в значении свойства EnhancedKeyUsage List.

Этот параметр был повторно введен в PowerShell 7.1

Свойства скрипта

Новые свойства скрипта были добавлены в объект X509Certificate2, который представляет сертификаты, чтобы упростить поиск сертификатов и управлять ими.

  • DnsNameList. Чтобы заполнить свойство DnsNameList DnsNameList, поставщик сертификатов копирует содержимое из записи DNSName в расширении SubjectAlternativeName (SAN). Если расширение SAN пусто, свойство заполняется содержимым из поля "Тема" сертификата.
  • EnhancedKeyUsageList: чтобы заполнить свойство EnhancedKeyUsageList, поставщик сертификатов копирует свойства OID поля EnhancedKeyUsage (EKU) в сертификате и создает понятное имя для него.
  • SendAsTrustedIssuer: чтобы заполнить свойство SendAsTrustedIssuer, поставщик сертификатов копирует свойство SendAsTrustedIssuer из сертификата. Дополнительные сведения см. в статье Управление доверенными издателями для проверки подлинности клиента.

Эти новые функции позволяют выполнять поиск сертификатов на основе dns-имен и дат окончания срока действия, а также различать сертификаты проверки подлинности клиента и сервера по значению свойств расширенного использования ключей (EKU).

Использование конвейера

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

Получение помощи

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

Чтобы получить разделы справки, настроенные для диска файловой системы, выполните команду Get-Help на диске файловой системы или используйте параметр -PathGet-Help, чтобы указать диск файловой системы.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path Cert:

См. также