Поиск по сайту:

о поставщике сертификатов


Имя провайдера

Сертификат

Диски

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