Uh oh!
There was an error while loading. Please reload this page.
Добрый день! Я бы мог передавать пароль, когда сертификат загружается из файла, но сертификат у меня выбирается из хранилища CpX509Store(StoreLocation.CurrentUser) и я не могу понять, как мне передать пароль к сертификату в этом случае и возможно ли это, если мне нужен доступ к приватному ключу сертификата. |
Replies: 1 comment 1 reply
Если я правильно понял - установлен контейнер ключа из сертификата, при установке указан пароль на контейнер закрытого ключа, нужно воспользоваться закрытым ключом данного сертификата при работе с ним через хранилище сертификатов. Вариант 1 - переоткрыть контейнер с указанием пароля на него, в данном случае читается из Gost3410_2012_256CryptoServiceProvidercert_key=certificate.PrivateKeyasGost3410_2012_256CryptoServiceProvider;if(null!=cert_key){varcspParameters=newCspParameters();//копируем параметры 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=newSecureString();foreach(varcinargs[2]){cspParameters.KeyPassword.AppendChar(c);}//создаем новый контекст сертификат, поскольку исходный открыт readonlycertificate=newX509Certificate2(certificate.RawData);//задаем криптопровайдер с установленным паролемcertificate.PrivateKey=newGost3410CryptoServiceProvider(cspParameters);}Вариант 2 - указать пин для открытого контейнера ключа stringpassword="111";SecureStringsecureString=newSecureString();foreach(charinterinpassword){secureString.AppendChar(inter);}Gost3410_2012_256CryptoServiceProviderprivateKey=cert.PrivateKeyasGost3410_2012_256CryptoServiceProvider;privateKey.SetContainerPassword(secureString); |
Если я правильно понял - установлен контейнер ключа из сертификата, при установке указан пароль на контейнер закрытого ключа, нужно воспользоваться закрытым ключом данного сертификата при работе с ним через хранилище сертификатов.
Вариант 1 - переоткрыть контейнер с указанием пароля на него, в данном случае читается из
args[2]