-
|
Добрый день! Я бы мог передавать пароль, когда сертификат загружается из файла, но сертификат у меня выбирается из хранилища CpX509Store(StoreLocation.CurrentUser) и я не могу понять, как мне передать пароль к сертификату в этом случае и возможно ли это, если мне нужен доступ к приватному ключу сертификата. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
|
Если я правильно понял - установлен контейнер ключа из сертификата, при установке указан пароль на контейнер закрытого ключа, нужно воспользоваться закрытым ключом данного сертификата при работе с ним через хранилище сертификатов. Вариант 1 - переоткрыть контейнер с указанием пароля на него, в данном случае читается из Gost3410_2012_256CryptoServiceProvider cert_key = certificate.PrivateKey as Gost3410_2012_256CryptoServiceProvider;
if (null != cert_key)
{
var cspParameters = new CspParameters();
//копируем параметры csp из исходного контекста сертификата
cspParameters.KeyContainerName = cert_key.CspKeyContainerInfo.KeyContainerName;
cspParameters.ProviderType = cert_key.CspKeyContainerInfo.ProviderType;
cspParameters.ProviderName = cert_key.CspKeyContainerInfo.ProviderName;
cspParameters.Flags = cert_key.CspKeyContainerInfo.MachineKeyStore
? (CspProviderFlags.UseExistingKey|CspProviderFlags.UseMachineKeyStore)
: (CspProviderFlags.UseExistingKey);
cspParameters.KeyPassword = new SecureString();
foreach (var c in args[2])
{
cspParameters.KeyPassword.AppendChar(c);
}
//создаем новый контекст сертификат, поскольку исходный открыт readonly
certificate = new X509Certificate2(certificate.RawData);
//задаем криптопровайдер с установленным паролем
certificate.PrivateKey = new Gost3410CryptoServiceProvider(cspParameters);
}Вариант 2 - указать пин для открытого контейнера ключа string password = "111";
SecureString secureString = new SecureString();
foreach (char inter in password)
{
secureString.AppendChar(inter);
}
Gost3410_2012_256CryptoServiceProvider privateKey = cert.PrivateKey as Gost3410_2012_256CryptoServiceProvider;
privateKey.SetContainerPassword(secureString); |
Beta Was this translation helpful? Give feedback.
Если я правильно понял - установлен контейнер ключа из сертификата, при установке указан пароль на контейнер закрытого ключа, нужно воспользоваться закрытым ключом данного сертификата при работе с ним через хранилище сертификатов.
Вариант 1 - переоткрыть контейнер с указанием пароля на него, в данном случае читается из
args[2]