29

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

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

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

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

编辑:这个问题专门关于使用WCF 测试客户端来测试已经使用自签名证书通过 SSL 保护的 Web 服务。服务器已经设置为接受提供的任何证书,它是 WCF 测试客户端,我看不到这样做的方法。

4

6 回答 6

12

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

  1. 创建自签名证书

    makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky 签名
        -ss CA -sr 当前用户  
        -cy 权限
        -sv CA.pvk CA.cer
  2. 为 SSL 创建一个由该根证书签名的非自签名证书,然后从中创建 pfx 文件

    makecert -pe -n "CN=servername" -a sha1 -sky 交换
        -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk
        -sp "Microsoft RSA SChannel 加密提供程序"
        -sy 12 -sv server.pvk server.cer
    
    pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

现在您只需将其导入server.pfxIIS 并设置网站绑定以使用此证书,并通过这样做在服务器和客户端中安装CA.cerin Local Computer\ Trusted Root Certification Authoritiesstore,此 WCF 客户端将通过 HTTPS 与服务一起使用,没有任何问题。

于 2012-03-28T01:12:28.143 回答
5

如果您将 WCF Test Client 替换为WCFStorm Lite Edition,您应该能够做到这一点。它是免费的,并且比 MS 的测试客户端更灵活...例如,如果您正在执行用户名身份验证,它会让您指定用户名和密码。

于 2010-05-28T18:31:40.730 回答
3

这个问题的答案对我有帮助。请务必使用证书预期的确切机器名称。例如,machine/service.svc可能不起作用,而machine.domain/service.svc- 起作用。

于 2011-10-20T08:48:16.857 回答
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;
        }
于 2013-12-19T10:30:39.347 回答
1

对的,这是可能的。

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

于 2017-11-27T12:54:43.893 回答
-4

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

尝试这个:

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

回电:

bool EasyCertCheck(object sender, X509Certificate cert,
        X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
    return true;
}
于 2010-05-08T01:19:58.177 回答