Добавление сертификата клиенту WCF. Не удается найти сертификат X.509 - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть клиент WCF, который собирается аутентифицироваться на каком-либо веб-сервисе, используя сертификат, выданный этим сервисом. Сначала мой клиент использовал привязку https, как показано ниже:

var httpsBinding = new BasicHttpsBinding();
httpsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
httpsBinding.Security.Mode = BasicHttpsSecurityMode.Transport;

, но это привело к следующей ошибке:

InvalidOperationException: сертификат клиента не предоставлен. Укажите сертификат клиента в ClientCredentials.

Затем я добавил следующий код в свою конфигурацию клиента:

this.ChannelFactory.Credentials.ClientCertificate.SetCertificate("test", System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, 
                System.Security.Cryptography.X509Certificates.StoreName.My); 

И теперь я получаю ошибку

System.InvalidOperationException: «Не удается найти сертификат X.509, используя следующие критерии поиска: StoreName« My », StoreLocation« LocalMachine », FindType« FindBySubjectDistinguishedName », FindValue« test ». '

IЯ абсолютно уверен, что сертификат находится в папке «Личные» на моем локальном компьютере, но он все равно не может его найти. Я попытался поместить сертификат в разные папки, переименовать его, используя отпечаток пальца для идентификации, но мое приложение все еще не может его найти. В чем может быть проблема здесь?

1 Ответ

1 голос
/ 08 ноября 2019

Я предлагаю вам настроить сертификат с помощью X509FindType.FindByThumbprint.

ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
//client.ClientCredentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindByThumbprint, "cbc81f77ed01a9784a12483030ccd497f01be71c");
client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "9ee8be61d875bd6e1108c98b590386d0a489a9ca");

Это соответствует приведенному ниже значению.
enter image description here
Для того, чтобыразрешить службе WCF иметь доступ к этому локальному сертификату, обычно мы добавляем учетную запись Everyone в группу управления закрытого ключа сертификата.
Кроме того, служба WCF с проверкой подлинности клиента с помощью сертификата обычно требует, чтобы мы настроили обеСертификат обслуживания и сертификат клиента на стороне клиента.
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...