【发布时间】:2016-11-03 05:40:33
【问题描述】:
我正在尝试使用 Powershell 从证书中提取公钥。但是,每当我使用 Powershell 命令Get-PfxCertificate 时,它只会输出证书的指纹,而不是公钥。如何让它输出公钥?
【问题讨论】:
标签: powershell certificate public-key pkcs12
我正在尝试使用 Powershell 从证书中提取公钥。但是,每当我使用 Powershell 命令Get-PfxCertificate 时,它只会输出证书的指纹,而不是公钥。如何让它输出公钥?
【问题讨论】:
标签: powershell certificate public-key pkcs12
要使用 Powershell 从 PFX 证书中检索公钥,请使用以下命令:
(Get-PfxCertificate -FilePath mycert.pfx).GetPublicKey()
要将公钥转换为不带连字符的十六进制字符串,您可以使用以下命令:
[System.BitConverter]::ToString((Get-PfxCertificate -FilePath mycert.pfx).GetPublicKey()).Replace("-", "")
【讨论】:
请注意,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()
EphemeralKeySet 标志;$X509KeyStorageFlag = 32 只是 $X509KeyStorageFlag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::EphemeralKeySet 的简写
X509KeyStorageFlags 枚举器规范 https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509keystorageflags
【讨论】: