У меня есть в наличии файл
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!!!!
Люди добрые помогите разыскать этот зарытый ключ