Вопрос или проблема
Я устанавливаю PFX следующим образом:
$securePassword = Read-Host -AsSecureString "Введите пароль PFX"
Import-PfxCertificate -FilePath "foo.pfx" -CertStoreLocation "Cert:\LocalMachine\My" -Password $securePassword
Я проверяю, что он установлен:
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.Thumbprint -eq "02C55BC23568A755E69A3479E1F8681B1CFE"
} | Format-List
Subject :
Issuer :
Thumbprint : 02C55BC23568A755E69A3479E1F8681B1CFE
FriendlyName :
NotBefore :
NotAfter :
Extensions :
По какой-то причине приложение, которое я использую, не работает. Оно просто отображает сообщение:
System.ApplicationException: Набор ключей не существует
Однако, если я использую Мастер импорта сертификатов, все работает нормально.
Я вижу опцию “Включить все расширенные свойства”, для которой не нахожу соответствующей опции командной строки, но это имеет значение?
Как я могу сравнить два сертификата, установленных разными методами?
Какие другие свойства я могу посмотреть? Я думаю о таких свойствах, как владелец, разрешения и т.д.
Ответ или решение
Для установки PFX сертификата через командную строку, вы уже используете подходящий метод с помощью PowerShell. Давайте подробно рассмотрим процесс установки, устранения проблем и сравнения сертификатов.
Установка PFX сертификата через PowerShell
-
Создание защищённого пароля:
Ваша команда для чтения пароля из командной строки выглядит правильно:$securePassword = Read-Host -AsSecureString "Введите пароль PFX"
-
Импорт сертификата:
Импорт сертификата осуществляется командойImport-PfxCertificate
. Важно убедиться, что вы указываете правильный путь к PFX файлу и что у вас есть достаточные права доступа для записи в указанный хранилище.Import-PfxCertificate -FilePath "foo.pfx" -CertStoreLocation "Cert:\LocalMachine\My" -Password $securePassword
Проверка наличия сертификата
После импорта сертификата вы можете проверить его наличие:
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.Thumbprint -eq "02C55BC23568A755E69A3479E1F8681B1CFE"
} | Format-List
Проблема с доступом к ключу
Ошибка System.ApplicationException: Keyset does not exist
обычно указывает на проблемы с доступом к закрытому ключу сертификата, который был импортирован. Это может происходить по следующим причинам:
-
Недостаточные разрешения: При импорте сертификата через PowerShell могут возникнуть проблемы с разрешениями. Убедитесь, что у вашего пользователя есть права на доступ к закрытому ключу. Вы можете использовать
certlm.msc
для проверки и изменения разрешений. -
Пользовательская учетная запись: Убедитесь, что вы импортируете сертификат, используя ту же учетную запись, под которой запускается ваше приложение. Если вы импортируете сертификат как LocalMachine, убедитесь, что приложение имеет доступ к этому учетному хранилищу.
Сравнение сертификатов
Если сертификат был успешно импортирован с помощью Мастера импорта сертификатов, но не работает через PowerShell, стоит провести сравнение свойств. Вы можете использовать следующие команды для получения всех свойств:
$certFromPowerShell = Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.Thumbprint -eq "02C55BC23568A755E69A3479E1F8681B1CFE"
}
$certFromWizard = Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.FriendlyName -eq "Ваше_Имя_Сертификата_Из_Мастера"
}
Свойства для сравнения
- Subject: Убедитесь, что адреса совпадают.
- Issuer: Проверьте, выдавал ли сертификат тот же Центр сертификации.
- Thumbprint: Убедитесь, что отпечатки (thumbprints) совпадают.
- Свойства ключа: Для проверки доступа к закрытому ключу выполните:
$certFromPowerShell.PrivateKey | Format-List
Также проверьте свойства разрешений для закрытого ключа:
$privateKey = $certFromPowerShell.PrivateKey
$privateKey.CspKeyContainerInfo
Заключение
Импортируя PFX сертификаты через командную строку, важно учитывать разрешения и права доступа. Использование мастера импорта сертификатов может автоматически устанавливать некоторые параметры, которые не устанавливаются при использовании командной строки. Сравнение сертификатов по вышеуказанным свойствам поможет выявить различия, которые могут быть причиной проблемы. Надеюсь, эта информация поможет вам успешно настроить ваш сертификат и устранить ошибку.