Не удается найти значение AuthorityKeyIdentifier в PowerShell объекта x509Certificates

У меня нет проблем с извлечением значения "SubjectKeyIdentifier" из объекта x509certificates, что я делаю, сначала устанавливая объект X509 на переменную $Cert, а затем выполняя следующую строку:

$Cert.Extensions.SubjectKeyIdentifier

Это значение соответствует тому, что я вижу в графическом интерфейсе MMC.

Однако для

$Cert.Extensions.AuthorityKeyIdentifier.

Я могу углубиться в объект с помощью:

$Cert.Extensions.Oid

И это дает два столбца, например:

Value       FriendlyName
2.5.29.14   Subject Key Identifier
2.4.29.35   Authority Key Identifier

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

Как мне извлечь это значение из объекта?

2 ответа

Как сказал bartonjs, в PowerShell или.NET нет встроенной поддержки расширения AKI. Вы должны использовать сторонние библиотеки или инструменты. Однако, если вам разрешено использовать модули PS, вы можете попробовать мой модуль PowerShell PKI (PSPKI). В модуль входит библиотека, содержащая классы для большинства расширений X.509, включая AKI.

После импорта модуля вы можете позвонить:

$cert.ResolvedExtensions

который возвращает набор декодированных расширений:

PS C:\> $cert.ResolvedExtensions | ?{$_.oid.value -eq "2.5.29.35"}

IncludedComponents : KeyIdentifier
KeyIdentifier      : 0159abe7dd3a0b59a66463d6cf200757d591e76a
IssuerNames        :
SerialNumber       :
Critical           : False
Oid                : 2.5.29.35 (Authority Key Identifier)
RawData            : {48, 22, 128, 20...}


PS C:\>

Платформа не имеет встроенного декодера для идентификатора ключа авторизации. Вам нужно будет использовать считыватель DER ASN.1, например https://dotnet.myget.org/feed/dotnet-corefxlab/package/nuget/System.Security.Cryptography.Asn1.Experimental, Bouncy Castle или другой не встроенные технологии (или вручную) и декодировать значение X509Extension.RawData в соответствии с кодировкой в https://tools.ietf.org/html/rfc5280.

Другие вопросы по тегам