Получить информацию о сертификатах с помощью powershell - PullRequest
1 голос
/ 10 мая 2019

Моя идея состоит в том, чтобы иметь код PowerShell, который доступен для обоих (Windows и Ubuntu) с небольшими изменениями (например, путь в get-childitem), поэтому я попробовал следующий сценарий на Ubuntu, но не работал на Windows и это показывает мне следующую ошибку

openssl.exe: не удается открыть [Тема]

В строке: 5 символов: 10

  • $ var = ((& C: \ OpenSSL-Win64 \ bin \ openssl.exe x509 -in $ File -dates -no ...

Вот код, который я написал:

$files = get-childitem Cert:\LocalMachine\My    
foreach ($File in $files) 
{ 
$var = ((& C:\OpenSSL-Win64\bin\openssl.exe x509 -in $File -dates -noout) - 
match 'notAfter')
Write-Host $var
}

Еще одно замечание: какой синтаксис использовать с openssl для получения имени сертификата

1 Ответ

2 голосов
/ 10 мая 2019

openssl x509 -in ожидает путь к файлу в качестве аргумента, а не пользовательский формат [X509Certificate] объекта.

Вместо этого вы можете перекодировать сертификат в формате PEM (base64) и труба это к openssl:

if($IsWindows){
    foreach($cert in Get-ChildItem cert:\LocalMachine\My\) {
       # Write BEGIN line
       $certStrings  = @('-----BEGIN CERTIFICATE-----')

       # Export cert data
       $certData     = $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)

       # Convert to Base64 + append
       $certStrings += [Convert]::ToBase64String($certData, [System.Base64FormattingOptions]::InsertLineBreaks)

       # Write END line
       $certStrings += '-----END CERTIFICATE-----'

       # Pass off to openssl.exe
       $NotAfter = @(($certStrings -join [System.Environment]::NewLine) | .\path\to\openssl.exe x509 -text -noout -dates) -match 'notAfter'

       Write-Host $NotAfter
    }
}
else {
    foreach($cert in Get-ChildItem cert:\LocalMachine\My\) {
        $notAfter = @(& path\to\openssl.exe x509 -in $cert -dates -noout) -match 'notAfter'
Write-Host $notAfter
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...