Как получить открытый ключ из сертификата 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

дальнейшее чтение

Другие вопросы по тегам