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


Поставщик Certificate

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

Сертификат

Диски

Cert:

Возможности

ShouldProcess

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

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

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

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

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

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

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

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

  • Расположения хранилищ (Microsoft.PowerShell.Commands.X509StoreLocation), которые представляют собой высокоуровневые контейнеры, которые группируют сертификаты для текущего пользователя и для всех пользователей. В каждой системе существует расположение хранилищ CurrentUser и LocalMachine (все пользователи).

  • Хранилища сертификатов (System.Security.Cryptography.X509Certificates.X509Store), которые являются физическими хранилищами, в которых сертификаты сохраняются и управляются.

  • Сертификаты X.509 System.Security.Cryptography.X509Certificates.X509Certificate2 , каждый из которых представляет сертификат X.509 на компьютере. Сертификаты идентифицируются по их отпечаткам.

Поставщик сертификатов предоставляет пространство имен сертификата в качестве Cert: диска в PowerShell. Эта команда использует Set-Location команду , чтобы изменить текущее расположение на корневое хранилище сертификатов в хранилище 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 новые динамические Cert: параметрыDnsName, EKU, SSLServerAuthentication, и ExpiringInDays . Новые динамические параметры доступны в Windows PowerShell 3.0 и более поздних выпусках PowerShell. Параметры поставщика работают с IIS 8.0 в Windows Server 2012 и более поздних версиях.

Эта команда использует 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.

Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
  -SSLServerAuthentication

Поиск сертификатов с истекшим сроком действия на удаленных компьютерах

Эта команда использует Invoke-Command командлет для выполнения Get-ChildItem команды на компьютерах Srv01 и Srv02. Значение нуля (0) в параметре ExpiringInDays получает сертификаты на компьютерах Srv01 и Srv02 с истекшим сроком действия.

Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
  -Recurse -ExpiringInDays 0}

Объединение фильтров для поиска определенного набора сертификатов

Эта команда получает все сертификаты в расположении хранилища LocalMachine со следующими атрибутами:

  • "fabrikam" в dns-имени
  • "Проверка подлинности клиента" в своем EKU
  • значение $true для свойства SendAsTrustedIssuer
  • не истечет в течение следующих 30 дней.

Свойство NotAfter хранит дату окончания срока действия сертификата.

Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
  -EKU "*Client Authentication*" | Where-Object {
                                     $_.SendAsTrustedIssuer -and `
                                     $_.NotAfter -gt (get-date).AddDays.(30)
                                   }

Открытие оснастки "Сертификаты" консоли 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 does not 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 командлет для перемещения сертификата из хранилища "Мое" в хранилище 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 { Remove-Item `
  -Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
  -DeleteKey
  }

Удаление просроченных сертификатов

Эта команда использует параметр ExpiringInDays командлета Get-ChildItem со значением 0, чтобы получить сертификаты в хранилище WebHosting, срок действия которых истек.

Переменная, содержащая возвращенные сертификаты, передается в Remove-Item командлет , который удаляет их. Команда использует параметр DeleteKey для удаления закрытого ключа вместе с сертификатом.

$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey

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

Командлет New-Item не создает новые сертификаты в поставщике сертификатов . Используйте командлет New-SelfSignedCertificate , чтобы создать сертификат для тестирования.

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

На диске New-Item Cert: командлет создает хранилища сертификатов в расположении хранилища 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 { New-Item -Path cert:\LocalMachine\CustomStore } `
  -ComputerName Server01

Создание сертификатов клиента для WS-Man

Эта команда создает запись ClientCertificate , которую может использовать клиент WS-Management . Новый ClientCertificate будет отображаться в каталоге ClientCertificate как "ClientCertificate_1234567890". Все параметры являются обязательными. Издатель должен быть отпечатком сертификата издателя.

$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
         -Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
         -URI wmicimv2/* -Credential $cred

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

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

Эта команда использует Invoke-Command командлет для выполнения Remove-Item команды на компьютерах S1 и S2. Команда Remove-Item включает параметр Recurse , который удаляет сертификаты в хранилище перед удалением хранилища.

Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
  -ComputerName S1, S2

Динамические параметры

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

Примечание

Параметры, выполняющие фильтрацию по свойству, EnhancedKeyUsageList также возвращают элементы с пустым EnhancedKeyUsageList значением свойства. Сертификаты с пустым элементом EnhancedKeyUsageList можно использовать для любых целей.

Строка ItemType <>

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

Certificate На диске допускаются следующие значения:

  • Поставщик Certificate
  • Сертификат
  • Магазин
  • StoreLocation

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

CodeSigningCert <System.Management.Automation.SwitchParameter>

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

Этот параметр получает сертификаты, у которых в значении свойства EnhancedKeyUsageList есть "Подписывание кода".

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

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

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

Этот параметр впервые появился в Windows PowerShell 3.0.

EKU <System.String>

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

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

Этот параметр впервые появился в Windows PowerShell 3.0.

ExpiringInDays <System.Int32>

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

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

Этот параметр впервые появился в Windows PowerShell 3.0.

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

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

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

Этот параметр впервые появился в Windows PowerShell 3.0.

DeleteKey <System.Management.Automation.SwitchParameter>

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

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

Важно!

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

Этот параметр впервые появился в Windows PowerShell 3.0.

Свойства сценариев

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

  • DnsNameList: для заполнения DnsNameList свойства поставщик сертификата копирует содержимое из записи DNSName в расширении SubjectAlternativeName (SAN). Если расширение SAN пусто, свойство заполняется содержимым из поля Subject сертификата.

  • EnhancedKeyUsageList: чтобы заполнить EnhancedKeyUsageList свойство , поставщик сертификата копирует свойства OID поля EnhancedKeyUsage (EKU) в сертификате и создает для него понятное имя.

  • SendAsTrustedIssuer: для заполнения SendAsTrustedIssuer свойства поставщик сертификата копирует SendAsTrustedIssuer свойство из сертификата. Дополнительные сведения см. в статье Управление доверенными издателями для проверки подлинности клиента.

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

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

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

Получение справки

Начиная с Windows 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