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

问题描述 投票:0回答:7

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

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

当我尝试时,出现此错误:

错误:无法从中获取元数据 https:///Service1.svc 如果这是 Windows (R) 通信 您拥有的基金会服务 访问权限,请检查您是否拥有 启用元数据发布 指定地址。如需帮助启用 元数据发布,请参考 MSDN 文档位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata 交换错误 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 测试客户端,我没有找到执行此操作的方法。

wcf ssl ssl-certificate self-signed wcftestclient
7个回答
12
投票

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

  1. 创建自签名证书

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

    makecert -pe -n "CN=服务器名称" -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 服务器.pvk 服务器.cer
    
    pvk2pfx -pvk 服务器.pvk -spc 服务器.cer -pfx 服务器.pfx

现在您只需将

server.pfx
导入 IIS 并设置网站绑定即可使用此证书,并通过执行此 WCF 客户端将
CA.cer
\
Local Computer
存储中的
Trusted Root Certification Authorities
安装在服务器和客户端中可以通过 HTTPS 使用该服务,没有任何问题。


5
投票

如果您将 WCF 测试客户端替换为 WCFStorm Lite Edition,您应该能够执行此操作。它是免费的,并且比 MS 的测试客户端灵活得多...例如,如果您正在进行用户名身份验证,它会让您指定用户名和密码。


3
投票

这个问题的答案对我的案例有帮助。请务必使用证书所期望的准确机器名称。例如

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;
        }

1
投票

是的,这是可能的。

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


0
投票

在 IIS 中添加

https
绑定到我的网站并选择 IIS Express 开发证书后,我遇到了同样的问题。

事实证明,要使

https
正常工作,我还必须输入绑定的 主机名。就我而言
localhost


-4
投票

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

试试这个:

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

回电:

bool EasyCertCheck(object sender, X509Certificate cert,
        X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
    return true;
}
© www.soinside.com 2019 - 2024. All rights reserved.