向WCF客户端添加证书。找不到X.509证书

时间:2019-11-07 14:57:28

标签: wcf ssl certificate x509certificate

我有一个WCF客户端,该客户端将使用由该服务发布的证书针对某些Web服务进行身份验证。最初,我的客户使用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   “测试”。

我绝对可以将证书放在“本地计算机”上的“个人”文件夹中,但是仍然找不到。我尝试将证书放在指纹中的各个文件夹中,并使用指纹进行重命名,但我的应用程序仍然找不到它。这里可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我建议您使用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服务使用证书对客户端进行身份验证,这通常要求我们在客户端上同时设置服务证书和客户端证书。
随时让我知道是否有什么可以帮助您的。