Ошибка при импорте сертификата через PowerShell в локальное хранилище сертификатов. Отсутствует информация о секретном ключе

Я попробовал следующие способы импорта сертификата в хранилище локальных компьютеров через PowerShell. Консоль работала от имени администратора.

      Import-PfxCertificate -Exportable -Password (secure.string) -CertStoreLocation Cert:\LocalMachine\My -FilePath 'certificatepath.pfx'

я тоже попробовал

      $PFXFile = certificatepath.pfxc
$PFXPassword = secure.string
$PFXObject = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2($PFXFile, $PFXPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)

$CertificateStore = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store('My','LocalMachine')
$CertificateStore.Open('MaxAllowed')
$CertificateStore.Add($PFXObject
$CertificateStore.Close()

Проблема в том, что ни один метод не работает. В обоих случаях он отображается в хранилище LocalMachine, но похоже, что с ним связан закрытый ключ, хотя в файле PFX он есть.

Если я импортирую этот же файл через консоль MMC, он загружается нормально. Через PowerShell появляется следующее событие

      Level: Error
Source: Schannel
Event Id: 36870
Message: A fatal error occurred when attempting to access the TLS server credential private key. The error code returned from the cryptographic module is 0x8009030D. The internal error state is 10001.

Дополнительная информация: если я выполняю Get-Item для сертификата, импортированного через MMC, в свойстве PrivateKey будет указана информация. Импортировал через PowerShell, а его там нет.

ОС — Server 2019, если это имеет значение.

1 ответ

Что произойдет при использовании второго метода, если вы установитеимпортировать флаги для $PfxObject? Просто используя строку для параметров:

      $PFXObject = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2($PFXFile,$PFXPassword,"Exportable,MachineKeySet,PersistKeySet")

Если это не поможет, попробуйте ввести пароль как обычную строку.

Если с этими флагами импорта все работает, возможно, удалите сертификат и повторите попытку без расширения .

Лично мне понадобился небольшой метод проб и ошибок, чтобы определить, когдатребуется. Но если этот параметр не нужен для вашего процесса (в том числе протестирован на другом компьютере), то обычно лучше опустить ненужные параметры.

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