我试图从使用PowerShell证书的公钥。但是,每当我使用PowerShell命令Get-PfxCertificate
只输出证书的指纹,而不是公共密钥。我怎样才能得到它的输出公钥?
要使用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
.NET对象的任何X509Certificate2
方法或构造与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