Powershell 将证书传输到新电脑-如何确定证书是否可导出

Powershell 将证书传输到新电脑-如何确定证书是否可导出

我正在使用以下 powershell 获取证书列表(包括所有已存档的证书),以便我可以轻松地将它们传输到新 PC

$store=new-object 
System.Security.Cryptography.X509Certificates.X509Store("My","CurrentUser")
$store.open("ReadOnly,IncludeArchived")
$privateCerts = $store.Certificates | Where-Object { $_.hasPrivateKey }

但是,当我尝试使用例如将它们导出到 pfx 文件时

$privateCerts| Foreach-Object { [system.IO.file]::WriteAllBytes("$($_.thumbprint)$($_.Subject).pfx", ($_.Export('PFX', 'password')) ) }

对于任何不可导出的证书,它都会抛出异常。现在我知道我无法导出这些证书,但我想跳过它们,而不会让脚本抛出错误。我可以通过捕获异常来解决这个问题,但有没有办法确定证书是否可导出?

我发现对 x509keystorageflags 的引用有一个我可以检查的“可导出”位,但我无法弄清楚如何使用 powershell 获取证书的信息。

答案1

Exportable位是在私钥容器本身上设置的,而不是直接在证书上设置的:

$privateCerts = $store.Certificates | Where-Object {$_.HasPrivateKey}
$Exportables  = $privateCerts | Where-Object {$_.PrivateKey.CspKeyContainerInfo.Exportable}

我认为这不适用于基于 RSA 的密钥对以外的其他类型

相关内容