我正在尝试撤回Windows证书的描述属性。它不是标准X509证书属性。
我发现的唯一参考是使用Capicom(我如何使用PowerShell访问证书扩展名?
有人知道访问此属性的其他方法吗?
谢谢
好吧,在发布时,任何评论都不是正确的,也不是相关的。描述不是X.509证书对象的一部分,它是供应商特定的(在当前情况下(附加的属性。该属性是通过证书存储附加的,不存在于其外部。
nor PowerShell nor .NET提供了本机以从证书中读取商店附属物业(尽管有些友好名称之类的东西(。取而代
$Cert = gi Cert:CurrentUserMy510F2809B505D9B32F167F6E71001B429CE801B8
$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
变量中。