【问题标题】:How do I get the public key from a PFX certificate using Powershell?如何使用 Powershell 从 PFX 证书中获取公钥?
【发布时间】:2016-11-03 05:40:33
【问题描述】:

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

【问题讨论】:

    标签: powershell certificate public-key pkcs12


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      请注意,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 的简写

      进一步阅读

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多