Как я могу получить доступ к закрытому ключу с помощью учетной записи пользователя ASPNET?
-
03-07-2019 - |
Вопрос
У меня возникли проблемы с импортом и доступом к закрытому ключу пользователя ASPNET.Я знаю, что когда кто-то импортирует закрытый ключ (файл .pfx) вручную в Windows, вы получаете возможность пометить ключ как экспортируемый.Насколько я могу судить, это необходимо для того, чтобы в дальнейшем получить этот закрытый ключ.
Моя проблема заключается в том, что я импортирую закрытый ключ в коде как пользователь ASPNET, и, похоже, нет способа пометить его как экспортируемый, как это делает мастер импорта сертификатов Windows.Чтобы уточнить, импорт работает нормально, но когда я получаю доступ к сведениям об импортированном сертификате, данные закрытого ключа отсутствуют.
Это код, который я использую для импорта сертификата после того, как я уже открыл файл .pfx с правильным паролем.
public void ImportCertificate(X509Certificate2 cert, StoreName name, StoreLocation loc)
{
X509Store certStore = new X509Store(name, loc);
StorePermission permission = new StorePermission(PermissionState.Unrestricted);
permission.Flags = StorePermissionFlags.AddToStore;
permission.Assert();
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(cert);
certStore.Close();
}
Я испорчу разрешения или способ импорта этого закрытого ключа?Или я делаю это совершенно неправильно?
Решение
Я считаю, что вам нужно установить флаг X509KeyStorageFlags.Exportable при импорте сертификата.Вы не показываете этот код, но существует перегрузка метода Import с этой сигнатурой:
public override void Import(string fileName, string password,
X509KeyStorageFlags keyStorageFlags);
или этот:
public override void Import(byte[] rawData, string password,
X509KeyStorageFlags keyStorageFlags);
Это позволит вам установить его перед импортом.В остальном все выглядит хорошо!
Ричард