客户端找不到X.509证书

时间:2011-08-12 06:33:57

标签: .net wcf x509certificate

我正在本地工作站上测试WCF服务,并且在使用X509证书时遇到了困难。

我已经创建了一个证书并成功注册了它。证书显示在受信任人/证书下的证书管理器中。服务行为配置如下(名称注释为 * ):

<serviceCertificate findValue="*****" storeLocation="LocalMachine"
              storeName="TrustedPeople" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="*****.DistributorValidator, *****" />
<issuedTokenAuthentication certificateValidationMode="None" />

但是,当在浏览器中打开服务时,我收到错误“System.InvalidOperationException:无法使用以下搜索条件找到X.509证书:StoreName'TrustedPeople',StoreLocation'LocalMachine',FindType'FindBySubjectName', FindValue“ * *** ”。

当我尝试在测试客户端中以编程方式设置证书时,会发生同样的错误:

 serviceclient.ClientCredentials.ClientCertificate.SetCertificate(
                        StoreLocation.LocalMachine,
                        StoreName.TrustedPeople,
                        X509FindType.FindBySubjectName,
                        "CN=TravelBrokerKey");

似乎按主题名称,指纹或序列号查找没有任何区别。我也尝试捕获异常和调试,但无法将调试器附加到它(因此似乎异常发生在客户端)。还试图通过浏览器设置直接注册证书,但这也没有帮助。

测试环境操作系统是Windows 7,并使用浏览器IE8和Firefox 4.0进行测试。

1 个答案:

答案 0 :(得分:1)

我认为您错误地使用了证书,您的案例中的证书用于识别服务,我认为您的服务需要客户端使用Username客户端凭据类型,因为我看到您提供自定义UserNamePasswordValidator,所以您应该在ClientCredentials中设置用户名和密码。

您应该在客户端指定服务的证书,而不是在ClientCredentials.ClientCertificate中指定,该证书用于客户端证书。

以下链接可以帮助您:

An easy way to use certificates for WCF security

How to: Use Certificate Authentication and Message Security in WCF Calling from Windows Forms