Поделиться через


about_Certificate_Provider

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

Сертификат

Диски

Cert:

Возможности

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

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
}

Удаление сертификатов с истекшим сроком действия

Эта команда использует параметр ExpiringInDays командлета Get-ChildItem0 со значением , чтобы получить сертификаты в 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

Create нового хранилища сертификатов на удаленном компьютере

Эта команда создает новое хранилище сертификатов с именем 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
  • ExpiringInDays
  • 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:

См. также раздел