是否可以强制WCF测试客户端接受自签名证书?

时间:2010-05-08 01:08:08

标签: wcf ssl ssl-certificate self-signed wcftestclient

我在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测试客户端我没有看到这样做的方法。

6 个答案:

答案 0 :(得分:12)

您可以在开发区域中创建非自签名证书,然后在IIS中使用此证书来应用SSL。步骤是:

  1. 创建自签名证书

    makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky signature 
        -ss CA -sr CurrentUser  
        -cy authority 
        -sv CA.pvk CA.cer
  2. 为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
  3. 现在您只需要将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;
}