如何使用Powershell从PFX证书获取公钥?

时间:2016-06-30 23:18:36

标签: powershell certificate public-key pkcs12

我正在尝试使用Powershell从证书中提取公钥。但是,每当我使用Powershell命令Get-PfxCertificate时,它只输出证书的指纹而不是公钥。如何让它输出公钥?

2 个答案:

答案 0 :(得分:7)

要使用Powershell从PFX证书检索公钥,请使用以下命令:

(Get-PfxCertificate -FilePath mycert.pfx).GetPublicKey()

要将公钥转换为不带连字符的十六进制字符串,可以使用以下命令:

[System.BitConverter]::ToString((Get-PfxCertificate -FilePath mycert.pfx).GetPublicKey()).Replace("-", "")

答案 1 :(得分:0)

请注意,Get-PfxCertificate将您的私钥临时存储在%ProgramData%\Microsoft\Crypto\RSA\MachineKeys上,每个人都可以在其中读取它。

如果这不是理想的行为,则您可能应该使用import方法或X509Certificate2 .NET对象的构造函数,并以EphemeralKeySet作为密钥存储标志,这表明导入证书时,私钥应在内存中创建,而不应保留在磁盘上,例如:

$Cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2
$FullPathToCert = Resolve-Path -Path .\cert.pfx
$Password = Read-Host 'Password' -AsSecureString
$X509KeyStorageFlag = 32
$Cert.Import($FullPathToCert, $Password, $X509KeyStorageFlag)
$Cert.GetPublicKey()

注释

    .NET Framework 4.7.2 .NET Core 2.0 及更高版本支持的
  • EphemeralKeySet标志;
  • $X509KeyStorageFlag = 32只是$X509KeyStorageFlag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::EphemeralKeySet
  • 的简写

进一步阅读