Получить сертификат по назначению - PullRequest
0 голосов
/ 22 мая 2019

У меня есть этот код, который получает информацию о SSL-сертификатах "Local Machine" и сохраняет их в CSV-файле.Меня беспокоит то, что я не нашел подходящего имени, определяющего эти сертификаты.Поэтому я спрашиваю, есть ли поле, в котором указано имя сертификата?

Кроме того, я хочу сохранить «Предназначенные цели» сертификатов SSL и не могу понять, как это сделать.

Последний вопрос, я обнаружил, что есть некоторые сертификаты, в которых поле «Предполагаемые цели» имеет значение ALL, поэтому я хочу знать, каковы цели, упомянутые в этом случае?

Это моеСценарий, который я хочу, чтобы он показывал мне также «Intented Purposes» и, если найдено, название сертификата.

$StartDate = Get-Date
$CertPath = 'Cert:\LocalMachine\'
$CertsDetail = Get-ChildItem -Path $CertPath -Recurse | Where-Object {
    $_.PsIsContainer -ne $true
} | ForEach-Object {
    $DaysLeft = (New-TimeSpan -Start $StartDate -End $_.NotAfter).Days
    if ($DaysLeft -lt 1) {
        $Under30 = $true
        $Expired = $true
        $Text = "The Certificate is expired"
    } elseif ($DaysLeft -lt 30) {
        $Under30 = $true
        $Expired = $false
        $Text = "The Certificate is but valid about to expire"
    } else {
        $Under30 = $false
        $Expired = $false
        $Text = "The Certificate is still valid and not going soon to expire"
    }
    $FinalDate = Get-Date $_.NotAfter -Format 'dd/MM/yyyy hh:mm'

    [PSCustomObject]@{
        Text = $Text
        Subject = $_.Subject
        ExpireDate = $FinalDate
        DaysRemaining = $DaysLeft
        Under30Days = $Under30
        Expired = $Expired
    }
}
$CertsDetail | Where-Object {
    $_.DaysRemaining -lt 3650
} | Export-Csv -NoTypeInformation -Path 'C:\SECnology\Data\Utilities\Certificate_State.csv'

1 Ответ

0 голосов
/ 22 мая 2019

Следующий скрипт выполняет итерации Cert Extensions и, если используется, сохраняет в переменной $ Usage, которая включена в [PSCustomObject]

Редактировать: Incorporated JosefZ s ценные советы

## Q:\Test\2019\05\22\SO_56254011.ps1
$StartDate = Get-Date
$CertPath  = 'Cert:\LocalMachine\'
$FileOut   = 'C:\SECnology\Data\Utilities\Certificate_State.csv'
$CertsDetail = Get-ChildItem -Path $CertPath -Recurse | Where-Object {
    $_.PsIsContainer -ne $true
} | ForEach-Object {
    $DaysLeft = (New-TimeSpan -Start $StartDate -End $_.NotAfter).Days
    if ($DaysLeft -lt 1) {
        $Under30 = $true
        $Expired = $true
        $Text = "The Certificate is expired"
    } elseif ($DaysLeft -lt 30) {
        $Under30 = $true
        $Expired = $false
        $Text = "The Certificate is but valid about to expire"
    } else {
        $Under30 = $false
        $Expired = $false
        $Text = "The Certificate is still valid and not going soon to expire"
    }
    $FinalDate = Get-Date $_.NotAfter -Format 'dd/MM/yyyy hh:mm'
    $Usages = foreach($key in $_.Extensions){
      if('KeyUsages' -in $key.psobject.Properties.Name ){ $key.KeyUsages}
      if('EnhancedKeyUsages' -in $key.psobject.Properties.Name){
          $key.EnhancedKeyUsages.FriendlyName
      }
    }
    [PSCustomObject]@{
        Text         = $Text
        Subject       = $_.Subject
        ExpireDate    = $FinalDate
        DaysRemaining = $DaysLeft
        Under30Days   = $Under30
        Expired       = $Expired
        Usages        = $Usages-join ';'
    }
}
$CertsDetail | Out-Gridview
$CertsDetail | Where-Object {
    $_.DaysRemaining -lt 3650
} | Export-Csv -NoTypeInformation -Path $FileOut

Пример вывода.

Text          : The Certificate is expired
Subject       : CN=SITHS CA v3, O=Carelink, C=SE
ExpireDate    : 28-11-2015 07:02
DaysRemaining : -1271
Under30Days   : True
Expired       : True
Usages        : CrlSign, KeyCertSign
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...