Ищем и получаем через Powershell список истекших сертификатов


20 мая 2025


Поиск и получение устаревших сертификатов через Powershell

Для поиска сертификатов можно использовать командлет Powershell 'Get-ChildItem'. Один из путей, который мы можем указать в ключе Path - 'Cert:\', который и относится к сертификатам. Мы используем рекурсию, так как каждый сертификат хранится в разных контейнерах и каталогах.

Get-ChildItem -Path "Cert:\" -Recurse | ft

Использование Powershell Get-ChildItem с рекурсией для поиска сертификатов

Каждая строка, которая выведена сверху, является объектом. У каждого объекта множество свойств. За срок работы сертификата отвечает свойство "NotAfter".

Кроме того, в примере выше, выводятся объекты, которые не относятся к сертификатам. Их мы уберем указав сравнив их с классом х509 сертификатов - "[System.Security.Cryptography.X509Certificates.X509Certificate2]".

# вывод устаревших сертификатов
Get-ChildItem "cert:\" -Recurse | Where-Object {$_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] -and $_.NotAfter -lt (Get-Date)} | select -Property "FriendlyName", "NotAfter"

Использование Powershell Get-ChildItem с рекурсией для поиска устаревших сертификатов

Свойство 'FriendlyName' может пригодится, что бы идентифицировать сертификат. Это поле может быть пустым т.к. формально оно не относится к сертификатам, а имеет отношение к Microsoft Windows и не обязательно для заполнения. Сертификаты без 'FriendlyName' и других полей могут быть просто самоподписанными.

Если 'FriendlyName' пустое, то можно посмотреть свойство 'Subject', которое хранит похожую информацию.

$certs = Get-ChildItem cert:\ -Recurse | Where-Object {$_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] -and $_.NotAfter -lt (Get-Date)} 
$certs | select -Property "FriendlyName", "NotAfter", "Subject"

Использование Powershell Get-ChildItem с рекурсией для поиска устаревших сертификатов

У сертификата есть множество других характеристик, которые вы можете использоваться для идентификации. Их можно вывести и посмотреть разными способами. В примере ниже, через 'Get-Member', мы выводим все свойства и методы объекта, а через 'select *' - выводим и свойства и значения.

$certs | Get-Member
$certs | select * | select -first 1

Вывод свойств сертификата в Powershell

 

Поиск в директориях

Сертификаты располагаются в двух контейнерах:

  • CurrentUser - хранилище для текущего пользователя;
  • LocalMachine - хранилище для текущей ОС.

В каждом контейнере есть дополнительные директории. Вывести директории можно так:

Get-ChildItem "Cert:\LocalMachine\"

Просмотр устаревших сертификатов в конкретной директории.

$certs = Get-ChildItem "Cert:\LocalMachine\Root\" | Where-Object {$_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] -and $_.NotAfter -lt (Get-Date)} 
$certs | select -Property "FriendlyName", "NotAfter", "Subject"

Поиск сертификатов в каталогах с Powershell Get-ChildItem

 

Поиск сертификатов, которые истекут в ближайшие дни

Для примера поищем сертификаты, которые истекут в ближайшие 60 дней. Для этого, изначально, создадим специальный объект даты с датой, на 60 дней больше текущей. Эту дату мы добавим для сравнения в новое условие.

# В течении какого времени сертификат должен устареть
$exp_days = 60
# Объект с датой
$exp_date = (Get-Date).AddDays($exp_days)
# Поиск
$certs = Get-ChildItem "cert:\" -Recurse | Where-Object {$_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] -and $_.NotAfter -lt $exp_date -and $_.NotAfter -ge $(Get-Date)}
# Вывод определенных свойств сертификата
$certs | select -Property "FriendlyName", "NotAfter", "Subject"

Поиск сертификатов с Powershell, которые истекут в течении 60 дней

Если вам нужно найти сертификат, который истек, например, за последние 60 дней, можно использовать пример ниже. В этом случае нам нужно искать сертификаты, которые не меньше указанной даты, и не больше текущей. 

# В течение скольких дней сертификат устарел
$exp_days = -60
# Объект с датой
$exp_date = (Get-Date).AddDays($exp_days)
# Поиск
$certs = Get-ChildItem "cert:\" -Recurse | Where-Object {$_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] -and $_.NotAfter -gt $exp_date -and $_.NotAfter -lt (Get-Date)}
# Вывод определенных свойств сертификата
$certs | select -Property "FriendlyName", "NotAfter", "Subject"

...

Теги: #powershell


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.