Как получить открытый ключ из сертификата PFX с помощью Powershell?
Я пытаюсь извлечь открытый ключ из сертификата с помощью Powershell. Однако всякий раз, когда я использую команду Powershell Get-PfxCertificate
он выводит только отпечаток сертификата, а не открытый ключ. Как я могу получить его для вывода открытого ключа?
1 ответ
Чтобы получить открытый ключ из сертификата PFX с помощью Powershell, используйте следующую команду:
(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
флаг поддерживается .NET Framework 4.7.2, .NET Core 2.0 и выше;$X509KeyStorageFlag = 32
это просто сокращение для$X509KeyStorageFlag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::EphemeralKeySet
дальнейшее чтение
X509KeyStorageFlags
спецификация перечислителя https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509keystorageflags- Восемь советов по работе с сертификатами X.509 в.NET: http://paulstovell.com/blog/x509certificate2