我已成功使用针对localhost发出的自签名证书为我们的Logon Web服务获取WCF传输安全性。我将自签名证书添加为受信任的根证书颁发机构,以防止IE对不受信任的证书抱怨。当针对localhost进行测试时,一切正常,因为我们使用的是localhost,它还允许所有开发人员从他们自己的机器上测试服务而没有任何问题。
但是,我现在正试图在远程测试服务器上运行。在远程服务器上运行时,本地主机证书显然不再起作用。因此,我使用IIS7为服务器计算机创建了一个自签名测试证书,并设置IIS将此证书用于网站上的https通信。我还将此添加到服务器的信任根证书颁发机构存储中。然后我将WCFserver行为配置更改为现在不再查找本地主机证书,但要查找与机器的DNS名称绑定的证书,如下所示:
<behavior name="SSL">
<serviceCredentials>
<serviceCertificate
findValue="prods-build.mydomain.co.za"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
然后,此行为将链接到web.config文件中的Logon服务:
<service behaviorConfiguration="SSL" name="Pragma.OnKey.Services.Common.LogonService">
<endpoint address="" bindingConfiguration="pragmaSSL" binding="basicHttpBinding" name="Silverlight" contract="Pragma.OnKey.Services.Common.ILogonService" />
</service>
作为参考,我还包括使用的绑定配置:
<binding name="pragmaSSL">
<security mode="Transport"/>
</binding>
当我使用服务器计算机上的完全限定域名从浏览器运行测试时,每个工作都正常。 Fiddler显示为Logon Web服务调用建立的HTTPS连接。但是,只要我尝试使用远程计算机上的完全限定域名运行相同的测试,我就会得到通常的“错误尝试向URI https://myserver/Services/Logon.svc发出请求..检查clientaccesspolicy.xml”错误。 clientaccesspolicy.xml(见下文)位于网站的根文件夹中,请记住,这一切都正常直到我尝试使用完全限定的DNS名称远程访问服务。
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPACTION">
<domain uri="http://*"/>
<domain uri="https://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
所以我的问题是,我做错了什么?我错过了这个难题的哪一部分?如何使用自签名测试证书和Silverlight客户端在远程计算机上测试SSL实现?
请记住,使用针对localhost的自签名证书,所有这些工作正常。但是,我需要在测试和登台环境中测试我们的应用程序。
由于 Carel
答案 0 :(得分:1)
您在客户端计算机上做了什么来告诉它信任来自服务器的自签名(因此,本质上不受信任)证书?您是否将服务器的证书添加到CLIENT的可信商店?