Получить свойство «Описание» сертификата x509 с помощью Powershell - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь получить обратно описание свойства для сертификата Windows.Это не стандартное свойство сертификата x509.

Единственная ссылка, которую я нашел, - это использование capicom ( Как я могу получить доступ к ExtendedProperties сертификата с помощью powershell? ), которое теперь не поддерживается и в любом случае мне не поможеткак я буду запускать это удаленно.

Кто-нибудь знает какой-либо другой метод для доступа к этому свойству?

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2018

Ну, на момент публикации ни один комментарий не был верным или уместным в любом случае. Описание не является частью объекта сертификата X.509, оно является привязанным свойством конкретного поставщика (в данном случае Microsoft). Свойство присоединяется через хранилище сертификатов и не существует вне его.

Ни PowerShell, ни .NET не предлагают собственный способ чтения свойств, прикрепленных к магазину (хотя некоторые вещи, такие как Friendly Name, доступны) из сертификата. Вместо этого вам нужно вызвать CertGetCertificateContextProperty неуправляемую функцию через p / invoke:

$Cert = gi Cert:\CurrentUser\My\510F2809B505D9B32F167F6E71001B429CE801B8
$signature = @"
[DllImport("Crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool CertGetCertificateContextProperty(
    IntPtr pCertContext,
    uint dwPropId,
    Byte[] pvData,
    ref uint pcbData
);
"@
Add-Type -MemberDefinition $signature -Namespace PKI -Name Crypt32
$pcbData = 0
# if the function returns False, then description is not specified.
$CERT_DESCRIPTION_PROP_ID = 13
if ([PKI.Crypt32]::CertGetCertificateContextProperty($Cert.Handle,$CERT_DESCRIPTION_PROP_ID,$null,[ref]$pcbData)) {
    # allocate a buffer to store property value
    $pvData = New-Object byte[] -ArgumentList $pcbData
    # call the function again to write actual data into allocated buffer
    [void][PKI.Crypt32]::CertGetCertificateContextProperty($Cert.Handle,$CERT_DESCRIPTION_PROP_ID,$pvData,[ref]$pcbData)
    # Description is null-terminated unicode string
    $description = [Text.Encoding]::Unicode.GetString($pvData).TrimEnd()
}
Write-Host $description

Измените первую строку на строку, которую вы используете для получения сертификата. Объект сертификата должен храниться в переменной $cert.

...