我有一个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 “测试”。
我绝对可以将证书放在“本地计算机”上的“个人”文件夹中,但是仍然找不到。我尝试将证书放在指纹中的各个文件夹中,并使用指纹进行重命名,但我的应用程序仍然找不到它。这里可能是什么问题?
答案 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");
它对应于下面的值。
为了使WCF服务可以访问此本地证书,我们通常将Everyone
帐户添加到证书私钥的管理组中。
此外,WCF服务使用证书对客户端进行身份验证,这通常要求我们在客户端上同时设置服务证书和客户端证书。
随时让我知道是否有什么可以帮助您的。