我正在本地工作站上测试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进行测试。
答案 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