Ошибка импорта PFX ...? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть файл .crt и .key, из которого я создаю файл .pfx с использованием OpenSSL. Я пытаюсь использовать PowerShell для импорта файла .pfx в Cert: \ LocalMachine \ My, затем я буду использовать этот сертификат для OpenVPN. Используя следующий код, я не получаю никаких ошибок при импорте:

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.import("$env:TEMP\$site.pfx", $certPassword, "PersistKeySet")
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "LocalMachine")
$store.open("MaxAllowed")
$store.add($cert)
$store.close()

Я вижу сертификат в MMC, но в файле журнала OpenVPN отображается:

ошибка: C5066064: Microsoft Cryptoapi: CryptAcquireCertificatePrivateKey: Набор ключей не существует

Я пробовал $ certPassword как строку и как безопасную строку. Когда я импортирую сертификат через графический интерфейс (копируя пароль из содержимого $ certPassword), OpenVPN запускается нормально.

Я также пробовал этот код, но видел то же поведение:

Import-PfxCertificate -Password ($certPassword | ConvertTo-SecureString -AsPlainText -Force) -CertStoreLocation Cert:\LocalMachine\My -FilePath $env:temp\$site.pfx

Наконец, я запускаю сеанс PowerShell с повышенными правами.

Что я мог делать не так? Спасибо.

1 Ответ

0 голосов
/ 02 мая 2018

Поскольку вы добавляете сертификат в LocalMachine \ My store, вы, вероятно, захотите импортировать его с X509KeyStorageFlags.MachineKeySet

Это может быть

$cert.import("$env:TEMP\$site.pfx", $certPassword, "PersistKeySet | MachineKeySet")

но я на самом деле не знаю PowerShell, поэтому не знаю синтаксиса флагов.

Вторая возможность заключается в том, что импорт PFX сохранил ключ под CNG, но OpenVPN не использовал флаг «Я знаю, что означает CNG». Можно импортировать загрузку ключа в CAPI, указав значение CSP при сборке PFX с openssl

openssl pkcs12 -export ... -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider"
...