我在IIS 7中使用自签名证书运行WCF Web服务(这是一个概念验证,以确保这是我想要的路线)。它需要使用SSL。
是否可以使用WCF测试客户端调试此服务而无需非自签名证书?
当我尝试时,我收到此错误:
错误:无法从中获取元数据 HTTPS:///Service1.svc 如果这是Windows(R)通信 您拥有的基础服务 访问,请检查您有 启用了元数据发布 指定地址。帮助启用 元数据发布,请参阅 MSDN文档在 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange错误URI: HTTPS:///Service1.svc 元数据包含一个引用 无法解决: 的 'https:///Service1.svc'。 无法建立信任关系 用于SSL / TLS安全通道 权威''。该 基础连接已关闭: 无法建立信任关系 用于SSL / TLS安全通道。该 远程证书无效 根据验证 procedure.HTTP GET错误URI: HTTPS:///Service1.svc 下载时出错 的 'https:///Service1.svc'。 底层连接已关闭: 无法建立信任关系 用于SSL / TLS安全通道。该 远程证书无效 根据验证程序。
编辑:此问题专门用于使用 WCF测试客户端来测试已使用自签名证书通过SSL保护的Web服务。服务器已经设置为接受所提供的任何证书,它是WCF测试客户端我没有看到这样做的方法。
答案 0 :(得分:12)
您可以在开发区域中创建非自签名证书,然后在IIS中使用此证书来应用SSL。步骤是:
创建自签名证书
makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky signature -ss CA -sr CurrentUser -cy authority -sv CA.pvk CA.cer
为SSL创建一个非自签名证书,该证书由此根证书签名,然后从该证书创建pfx文件
makecert -pe -n "CN=servername" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv server.pvk server.cer pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx
现在您只需要将server.pfx
导入IIS并设置网站绑定以使用此证书,并在CA.cer
\ Local Computer
商店中安装Trusted Root Certification Authorities
在服务器和客户端中,通过这样做,WCF客户端可以通过HTTPS使用该服务而没有任何问题。
答案 1 :(得分:3)
如果用WCFStorm Lite Edition替换WCF测试客户端,您应该能够这样做。它是免费的,比MS的测试客户端更灵活......例如,它可以让你指定一个用户名&密码,如果您正在进行用户名验证。
答案 2 :(得分:3)
this question的答案对我的案例有帮助。请务必使用完全计算机名称作为证书期望。例如machine/service.svc
可能不起作用,而machine.domain/service.svc
- 可行。
答案 3 :(得分:2)
回答你的问题......以下是强制你的WCF测试客户端接受自签名证书的方法......
using (ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client())
{
System.Net.Security.RemoteCertificateValidationCallback callBack = (sender, certificate, chain, sslPolicyErrors) => true;
ServicePointManager.ServerCertificateValidationCallback += callBack;
Console.WriteLine(proxy.GetData(35));
ServicePointManager.ServerCertificateValidationCallback -= callBack;
}
答案 4 :(得分:0)
是的,这是可能的。
只需从服务(https://localhost/Service1.svc?singleWsdl)下载生成的WSDL,并在WCF测试客户端中添加服务时提供此文件的路径。
答案 5 :(得分:-5)
您可以提供自己的方法来验证证书。
试试这个:
ServicePointManager.ServerCertificateValidationCallback +=
new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck);
回电:
bool EasyCertCheck(object sender, X509Certificate cert,
X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}