首页 文章

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

提问于
浏览
25

我有一个使用自签名证书在IIS 7中运行的WCF Web服务(这是一个概念证明,以确保这是我想要的路线) . 它需要使用SSL .

是否可以使用WCF测试客户端调试此服务而无需非自签名证书?

当我尝试时,我收到此错误:

错误:无法从https:///Service1.svc获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布 . 有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455上的MSDN文档.WS-Metadata Exchange错误URI:https:///Service1.svc元数据包含一个引用无法解决:'https:///Service1.svc' . 无法与具有权限''的SSL / TLS安全通道 Build 信任关系 . 底层连接已关闭:无法为SSL / TLS安全通道 Build 信任关系 . 根据验证程序,远程证书无效.HTTP GET错误URI:https:///Service1.svc下载“https:///Service1.svc”时出错 . 底层连接已关闭:无法为SSL / TLS安全通道 Build 信任关系 . 根据验证程序,远程证书无效 .

编辑:这个问题具体是关于使用 WCF Test Client 使用自签名证书测试已通过SSL保护的Web服务 . 服务器已经设置为接受所提供的任何证书,'s the WCF Test Client I don't看到了这样做的方法 .

6 回答

  • 3

    您可以在开发区域中创建非自签名证书,然后在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使用该服务而无需任何服务问题 .

  • 12

    如果用WCFStorm Lite Edition替换WCF测试客户端,则应该能够执行此操作 . 它's free and is quite a bit more flexible than MS'的测试客户端...例如,它'll let you specify a user name & password if you'重新进行用户名认证 .

  • 0

    this question的回答在我的案例中有所帮助 . 请务必使用确切的机器名称作为证书期望 . 例如 machine/service.svc 可能无效,而 machine.domain/service.svc - 有效 .

  • 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

    对的,这是可能的 .

    只需从服务(https://localhost/Service1.svc?singleWsdl)下载生成的WSDL,并在WCF测试客户端中添加服务时提供此文件的路径 .

  • 3

    您可以提供自己的方法来验证证书 .

    试试这个:

    ServicePointManager.ServerCertificateValidationCallback +=
                new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck);
    

    回电:

    bool EasyCertCheck(object sender, X509Certificate cert,
            X509Chain chain, System.Net.Security.SslPolicyErrors error)
    {
        return true;
    }
    

相关问题