我正在尝试使用Powershell从证书中提取公钥。但是,每当我使用Powershell命令Get-PfxCertificate
时,它只输出证书的指纹而不是公钥。如何让它输出公钥?
答案 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()
EphemeralKeySet
标志; $X509KeyStorageFlag = 32
只是$X509KeyStorageFlag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::EphemeralKeySet
X509KeyStorageFlags
枚举符规范https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509keystorageflags