Куда потерялся зарытый ключ???? [WCF]
От: NikOnline  
Дата: 21.12.13 16:51
Оценка:
У меня есть в наличии файл cert.pfx. Через mmc устанавливаю в Persanal этот сертификат. Запускаю ниже написанный код, который выполняется без всяких ошибок.

NetTcpBinding tcpBinding = new NetTcpBinding(SecurityMode.Transport);
tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
ServiceHost host = new ServiceHost(typeof(Test), new Uri("net.tcp://localhost:9875/Example"));
host.AddServiceEndpoint(typeof(ITest), tcpBinding, string.Empty);
host.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, Environment.MachineName);
host.Open();
Console.ReadKey();


Удаляю из хранилища этот сертификат и запускаю такой скрипт который устанавливает тот же самый сертификат:
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
X509Certificate2 cert = new X509Certificate2("cert.pfx", "123");
store.Add(cert);
store.Close();

При выполнение этого скрипта ошибки не возникает, через mmc убеждаюсь что сертификат установился. Запускаю службу и получаю на методе host.Open(); такое исключение:

 System.ArgumentException was unhandled
  HResult=-2147024809
  Message=Возможно, что сертификат "CN=localhost" не имеет закрытого ключа, который может использоваться для обмена ключами, или у процесса нет прав доступа к закрытому ключу. Дополнительные сведения см. в тексте внутреннего исключения.
 
  InnerException: System.Security.Cryptography.CryptographicException
       HResult=-2146893802
       Message=Набор ключей не существует



От увиденного запустил от имени администратора, но ошибка не исчезла. mmc видно что у сертификата есть закрытый ключ.
host.Credentials.ServiceCertificate.Certificate.HasPrivateKey возвращает true!!!!
Люди добрые помогите разыскать этот зарытый ключ
Re: Куда потерялся зарытый ключ???? [WCF]
От: Аноним  
Дата: 21.12.13 16:54
Оценка: 5 (1)
Здравствуйте, NikOnline, Вы писали:


NO>
NO>X509Certificate2 cert = new X509Certificate2("cert.pfx", "123");
NO>

используйте другой конструктор с X509KeyStorageFlags и укажите PersistKeySet и MachineKeySet
Re[2]: Куда потерялся зарытый ключ???? [WCF]
От: Аноним  
Дата: 21.12.13 17:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>используйте другой конструктор с X509KeyStorageFlags и укажите PersistKeySet и MachineKeySet

Заработало!!!! Спасибо огромное
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.