Как посмотреть сертификаты на компьютере powershell

Обновлено: 07.07.2024

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

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

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

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

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

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

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

Расположения магазинов (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: диска.

Вы также можете работать с поставщиком сертификата с любого другого диска PowerShell. Чтобы сослаться на псевдоним из другого расположения, используйте Cert: имя диска в пути.

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

PowerShell использует Псевдонимы для предоставления привычного способа работы с путями поставщика. Команды, такие как dir и ls , теперь являются псевдонимами для Get-ChildItem, cd являются псевдонимом для Set-Location. и pwd — это псевдоним для Get-Location.

Отображение содержимого диска Cert:

Эта команда использует Get-ChildItem командлет для вывода хранилищ сертификатов в расположении хранилища сертификатов CurrentUser.

Если вы не используете Cert: диск, используйте абсолютный путь.

Отображение свойств сертификата на диске CERT:

Этот пример получает сертификат с Get-Item и сохраняет его в переменной. В примере показаны новые свойства сценария сертификата (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) с помощью Select-Object .

Найти все сертификаты соразработки

Эта команда использует CodeSigningCert и Рекурсивные параметры Get-ChildItem командлета, чтобы получить все сертификаты на компьютере с центром подписывания кода.

Поиск сертификатов с истекшим сроком действия

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

Поиск SSL-сертификатов сервера

Эта команда использует параметр SSLServerAuthentication Get-ChildItem командлета для получения всех SSL-сертификатов сервера в хранилищах My и WebHost.

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

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

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

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

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

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

Открытие оснастки "Сертификаты" консоли MMC

Invoke-Item Командлет будет использовать приложение по умолчанию, чтобы открыть указанный путь. Для сертификатов приложение по умолчанию — оснастка MMC "сертификаты".

Эта команда открывает оснастку "Сертификаты" MMC для управления указанным сертификатом.

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

Перемещение сертификатов

Перемещение всех сертификатов проверки подлинности сервера SSL в хранилище веб-узлов

Эта команда использует Move-Item командлет для перемещения сертификата из хранилища My в хранилище веб-узлов.

Move-Item не будет перемещать хранилища сертификатов и не будет переносить сертификаты в другое расположение, например переместить сертификат из хранилища LocalMachine в CurrentUser. Move-Item Командлет перемещает сертификаты, но не перемещает закрытые ключи.

Эта команда использует параметр SSLServerAuthentication Get-ChildItem командлета для получения сертификатов проверки подлинности сервера SSL в хранилище сертификатов My.

Возвращенные сертификаты передаются в Move-Item командлет, который перемещает сертификаты в хранилище WebHost.

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

Remove-Item Командлет удалит указанные сертификаты. -DeleteKey Динамический параметр удаляет закрытый ключ.

Удаление сертификата из хранилища ЦС

Эта команда удаляет сертификат из хранилища сертификатов центра сертификации, но не затрагивает связанный закрытый ключ.

На Cert: диске Remove-Item командлет поддерживает только параметры DeleteKey, path, WhatIf и Confirm . Все остальные параметры игнорируются.

Удаление сертификата с помощью подстановочных знаков в DNS-имени

Эта команда удаляет все сертификаты с именем DNS, содержащим "Fabrikam". Get-ChildItem Для получения сертификатов и Remove-Item командлета для их удаления используется параметр dnsName командлета.

Удаление закрытых ключей с удаленного компьютера

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

Используйте Enable-WSManCredSSP командлет, чтобы включить проверку подлинности на стороне поставщика службы безопасности учетных данных на клиенте на удаленном компьютере S1. CredSSP разрешает делегирование проверки подлинности.

С помощью Connect-WSMan командлета Подключите компьютер S1 к службе WinRM на локальном компьютере. После выполнения этой команды компьютер S1 отображается на локальном WSMan: диске в PowerShell.

Теперь можно использовать командлет Set-Item на диске WSMan:, чтобы включить атрибут CredSSP для службы WinRM.

Запустите удаленный сеанс на компьютере S1 с помощью New-PSSession командлета и укажите проверку подлинности CredSSP. Сохраняет сеанс в $s переменной.

Наконец, используйте Invoke-Command командлет для выполнения Remove-Item команды в сеансе в $s переменной. Remove-Item Команда использует параметр DeleteKey для удаления закрытого ключа вместе с указанным сертификатом.

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

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

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

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

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

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

На диске CERT: New-Item командлет создает хранилища сертификатов в расположении хранилища LocalMachine. Он поддерживает параметры Name, path, WhatIf и Confirm . Все остальные параметры игнорируются. Команда возвращает System. Security. Cryptography. X509Certificates. X509Store , представляющий новое хранилище сертификатов.

Эта команда создает новое хранилище сертификатов с именем "CustomStore" в расположении хранилищ LocalMachine.

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

Эта команда создает новое хранилище сертификатов с именем "HostingStore" в расположении хранилищ LocalMachine на компьютере Server01.

Команда использует Invoke-Command командлет для выполнения New-Item команды на компьютере Server01. Команда возвращает System. Security. Cryptography. X509Certificates. X509Store , представляющий новое хранилище сертификатов.

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

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

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

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

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

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

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

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

В PowerShell 6,0 были удалены следующие параметры поставщика сертификата.

  • DNSName
  • документенкриптионцерт
  • EKU
  • ExpiringInDays
  • SSLServerAuthentication

CodeSigningCert <System.Management.Automation.SwitchParameter>

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

Этот параметр возвращает сертификаты с подписыванием кода в значении свойства EnhancedKeyUsageList .

DeleteKey <System.Management.Automation.SwitchParameter>

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

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

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

Этот параметр появился в PowerShell 3,0.

ItemType <String>

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

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

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

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

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

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

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

EnhancedKeyUsageList . Чтобы заполнить EnhancedKeyUsageList свойство, поставщик сертификата копирует свойства Oid поля енханцедкэйусаже (EKU) в сертификате и создает для него понятное имя.

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

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

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

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

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

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

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

Используем PowerShell для поиска сертификатов с истекающим сроком действия – Hey, Scripting Guy! Blog

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает, как при помощи Windows PowerShell получить список сертификатов с истекающим сроком действия.

Это достаточно просто. А просто это потому, что в Windows PowerShell 3.0 для командлета Get-ChildItem был добавлен динамический параметр –ExpiringInDays, который предназначен для использования с провайдером Certificate. При помощи этого параметра вы можете указать количество дней, и командлет выведет вам список сертификатов, которые истекают в этот промежуток времени. Например, чтобы получить список сертификатов, истекающих в ближайшие 75 дней, используйте следующую команду:

Get-ChildItem -Path cert: -Recurse -ExpiringInDays 75

На рисунке ниже представлен вывод команды.

01

Мне не обязательно переходить на диск cert:, поскольку я могу указать его в качестве значения для параметра –Path. Если же мне нужно будет выполнить несколько операций на этом диске, то будет удобнее перейти на него при помощи команды Set-Location cert: (sl и cd – алиасы командлета).

После того, как я перейду на диск cert:, строка Windows PowerShell (по умолчанию), будет выглядеть следующим образом:

Получаем список истекающих сертификатов в Windows PowerShell 2.0

Если вы используете Windows PowerShell 2.0 (или вам нравится набирать код), вы также можете получить список истекающих сертификатов, используя командлет Get-ChildItem и передав его результаты командлету Where-Object, где вам будет нужно отфильтровать сертификаты по свойству NotAfter. Замечательным является тот факт, что Windows PowerShell позволяет вам довольно просто работать с датами. Здесь я использую метод AddDays объекта DateTime, возвращаемого командлетом Get-Date. Для того чтобы им воспользоваться, я помещу командлет Get-Date в скобки.

Внутри скриптблока Where-Object я сравниваю значение свойства NotAfter с датой, отстоящей от сегодняшней на 75 дней. Если сертификат истекает в этот промежуток времени, он передается командлету Select-Object, который выбирает свойства thumbprint и subject.

Следующая команда возвращает список сертификатов, истекающих в ближайшие 75 дней.

Get-ChildItem -Recurse | where < $_.notafter -le (get-date).AddDays(75) >| select thumbprint, subject

02

Запустив эту команду, мы увидим, что ее вывод несколько отличается от результатов предыдущей команды.

Причина этого состоит в том, что командлет Get-ChildItem с параметром –ExpiringInDays не возвращает сертификаты с уже истекшим сроком действия. А в Windows содержатся сертификаты с истекшим сроком действия, так как некоторые исполняемые файлы подписаны с их использованием. Поэтому такие сертификаты требуются для проверки правильности подписи.

Немного изменив команду, так, чтобы она отфильтровывала уже истекшие сертификаты, мы получим результаты, сходные с результатами первой команды.

date

02.02.2021

directory

PowerShell, Windows 10, Windows Server 2016

comments

комментария 4

Неожиданное истечение срока действия сертификата сервера может вызвать ряд неприятных последствий для ваших клиентов: невозможность установить безопасное подключение, ошибки аутентификации, назойливые предупреждения в браузере и т.д. В этой статье мы покажем, как с помощью PowerShell проверить срок действия SSL/TLS сертификатов на удаленных сайтах, а также истекающих сертификатах в хранилищах сертификатов на серверах и компьютерах домена.

Проверка срока действия SSL сертификата на веб-сайтах в Интернете с помощью PowerShell

В следующем PowerShell скрипте нужно указать список сайтов, на которых нужно проверять срок действия сертификата, а также за сколько дней до окончания действия сертификата начинать показывать уведомления ($minCertAge). В качестве примера я указал 80 дней.

Данный PowerShell скрипт проверит SSL сертификаты для всех сайтов из списка. Если обнаружится сертификат, который скоро просрочится, он будет выдел в предупреждении.

powerhell скрипт для проверки истекающих SSL сертфикатов на HTTPS сайтах

Для оповещения администратора о приближающемся сроке истечения SSL сертификата можно добавить всплывающее уведомление. Для этого раскоментируйте строку ShowNotification $messagetitle $message и добавьте функцию:

Function ShowNotification ($MsgTitle, $MsgText) Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = $MsgText
$balmsg.BalloonTipTitle = $MsgTitle
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
>

уведомление windows о просрачивающемся сертфикате

Поиск истекающих сертификатов в хранилище сертификатов Windows

Также вам может понадобится скрипт, который будет мониторить срок действия сертификатов, используемых для криптографических службах на серверах (например сертификаты на RDS, Exchange, SharePoint, LDAPS и т.д) или компьютерах пользователей.

На локальном компьютере вы можете получить список сертификатов, которые скоро просрочатся с помощью команды Get-ChildItem -Path cert . В Powershell 3.0 есть специальный аргумент -ExpiringInDays :

Get-ChildItem -Path cert: -Recurse -ExpiringInDays 30

В PowerShell 2.0 аналогичная команда выглядит так:

Чтобы проверить только собственные сертификаты, используйте контейнер Cert:\LocalMachine\My вместо корневого Cert: . Так вы не будете проверять корневые сертификаты Windows и коммерческие сертификаты.

Чтобы найти сертификаты, которые истекают в течении следующих 30 дней на всех серверах домена, можно использовать такой PowerShell скрипт:

$servers= (get-adcomputer -LDAPFilter "(&(objectCategory=computer)(operatingSystem=Windows Server*) (!serviceprincipalname=*MSClusterVirtualServer*) (!(userAccountControl:1.2.840.113556.1.4.803:=2)))").Name
$result=@()
foreach ($server in $servers)
$ErrorActionPreference="SilentlyContinue"
$getcert=Invoke-Command -ComputerName $server < Get-ChildItem -Path Cert:\LocalMachine\My -Recurse -ExpiringInDays 30>
foreach ($cert in $getcert) $result+=New-Object -TypeName PSObject -Property ([ordered]@'Server'=$server;
'Certificate'=$cert.Issuer;
'Expires'=$cert.NotAfter
>)
>
>
Write-Output $result

powerhsell скрипт для поиска сертфикатов, которые скоро просрочатся на компьютерах домена

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

Если вы задаётесь вопросом, в какой папке хранятся сертификаты в Windows, то правильный ответ в том, что в Windows сертификаты хранятся в реестре. Причём они записаны в виде бессмысленных бинарных данных. Чуть ниже будут перечислены ветки реестра, где размещены сертификаты, а пока давайте познакомимся с программой для просмотра и управления сертификатами в Windows.

В Windows просмотр и управление доверенными корневыми сертификатами осуществляется в программе Менеджер Сертификатов.

Чтобы открыть Менеджер Сертификатов нажмите Win+r, введите в открывшееся поле и нажмите Enter:


Перейдите в раздел «Доверенные корневые центры сертификации» → «Сертификаты»:


Здесь для каждого сертификата вы можете просматривать свойства, экспортировать и удалять.

Просмотр сертификатов в PowerShell

Чтобы просмотреть список сертификатов с помощью PowerShell:


Чтобы найти определённый сертификат выполните команду вида (замените «HackWare» на часть искомого имени в поле Subject):


Теперь рассмотрим, где физически храняться корневые CA сертификаты в Windows. Сертификаты хранятся в реестре Windows в следующих ветках:

Сертификаты уровня пользователей:

  • HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates — содержит настройки сертификатов для текущего пользователя
  • HKEY_CURRENT_USER\Software\Policies\Microsoft\SystemCertificates — как и предыдущее расположение, но это соответствует сертификатам пользователей, развёрнутым объектом групповой политики (GPO (Group Policy))
  • HKEY_USERS\SID-User\Software\Microsoft\SystemCertificates — соответствует настройке определённых пользовательских сертификатов. У каждого пользователя есть своя ветка в реестре с SID (идентификатор безопасности).

Сертификаты уровня компьютера:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\SystemCertificates — содержит настройки для всех пользователей компьютера
  • HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\SystemCertificates — как и предыдущее расположение, но это соответствует сертификатам компьютера, развёрнутым объектом групповой политики (GPO (Group Policy))

Сертификаты уровня служб:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Services\ServiceName\SystemCertificates — содержит настройки сертификатов для всех служб компьютера

Сертификаты уровня Active Directory:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\EnterpriseCertificates — сертификаты, выданные на уровне Active Directory.


И есть несколько папок и файлов, соответствующих хранилищу сертификатов Windows. Папки скрыты, а открытый и закрытый ключи расположены в разных папках.

Пользовательские сертификаты (файлы):

  • %APPDATA%\Microsoft\SystemCertificates\My\Certificates
  • %USERPROFILE%\AppData\Roaming\Microsoft\Crypto\RSA\SID
  • %USERPROFILE%\AppData\Roaming\Microsoft\Credentials
  • %USERPROFILE%\AppData\Roaming\Microsoft\Protect\SID

Компьютерные сертификаты (файлы):

  • C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

Рассмотрим теперь где хранятся корневые CA сертификаты веб-браузеров.

Google Chrome

Использует общесистемные доверенные корневые центры сертификации.


Чтобы перейти к списку сертификатов из веб браузера:


Настройки → Приватность и Защита → Безопасность → Управление сертификатами → Просмотр сертификатов → Центры сертификации → Доверенные корневые центры сертификации:



Opera

Чтобы перейти к списку сертификатов из веб браузера: Настройки → Перейти к настройкам браузера → Дополнительно → Безопасность → Ещё → Настроить сертификаты → Доверенные корневые центры сертификации:


Firefox


Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:


Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».

Читайте также: