1

我从 x509certificates 对象中提取“SubjectKeyIdentifier”值没有问题,我首先将 X509 对象设置为变量 $Cert,然后执行以下行:

$Cert.Extensions.SubjectKeyIdentifier

该值对应于我在 MMC GUI 中看到的值。

然而,没有这样的价值或选择

$Cert.Extensions.AuthorityKeyIdentifier.

我可以通过以下方式进一步研究对象:

$Cert.Extensions.Oid

这会产生两列,例如:

Value       FriendlyName
2.5.29.14   Subject Key Identifier
2.4.29.35   Authority Key Identifier

但是,我发现没有办法像我为主题密钥标识符所做的那样获得授权密钥标识符的实际值或真实值,并且它对应于 MMC GUI 中的值。
确认一下,这是一个叶级证书,GUI 确实显示了主题密钥标识符的长字符串值。

如何在对象中提取该值?

4

2 回答 2

0

正如 bartonjs 所说,PowerShell 或 .NET 中没有对 AKI 扩展的内置支持。您必须使用 3rd 方库或工具。不过,如果你被允许使用 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:\>
于 2019-11-22T19:13:42.120 回答
0

该框架没有用于授权密钥标识符的内置解码器。您必须使用 ASN.1 DER 阅读器,例如https://dotnet.myget.org/feed/dotnet-corefxlab/package/nuget/System.Security.Cryptography.Asn1.Experimental、Bouncy Castle 或其他非内置技术(或手动滚动)并根据https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.1中的编码解码 X509Extension.RawData 值。

于 2019-11-22T18:07:56.167 回答