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

是否可以强制WCF测试客户端接受自签名证书?,wcf,ssl,ssl-certificate,self-signed,wcftestclient,Wcf,Ssl,Ssl Certificate,Self Signed,Wcftestclient,我有一个WCFWeb服务使用自签名证书在IIS7中运行(这是一个概念证明,可以确保这是我想要走的路线)。需要使用SSL 是否可以使用WCF测试客户端调试此服务,而不需要非自签名证书 当我尝试时,会出现以下错误: 错误:无法从中获取元数据 https:///Service1.svc 如果这是Windows(R)通信 你的基础服务 访问,请检查您是否有 已在上启用元数据发布 指定的地址。寻求帮助 元数据发布,请参阅 MSDN文档位于 Exchange错误URI: https:///Service1.

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

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

当我尝试时,会出现以下错误:

错误:无法从中获取元数据 https:///Service1.svc 如果这是Windows(R)通信 你的基础服务 访问,请检查您是否有 已在上启用元数据发布 指定的地址。寻求帮助 元数据发布,请参阅 MSDN文档位于 Exchange错误URI: https:///Service1.svc 元数据包含一个 无法解决: 'https:///Service1.svc'. 无法建立信任关系 对于具有的SSL/TLS安全通道 权限“”。这个 基础连接已关闭: 无法建立信任关系 用于SSL/TLS安全通道。这个 远程证书无效 根据验证 procedure.HTTP获取错误URI: https:///Service1.svc 下载时出错 'https:///Service1.svc'. 基础连接已关闭: 无法建立信任关系 用于SSL/TLS安全通道。这个 远程证书无效 根据验证程序


编辑:这个问题特别是关于使用WCF测试客户端使用自签名证书测试已经通过SSL保护的web服务。服务器已经设置为接受提供的任何证书,我看不出有什么方法可以对WCF测试客户端执行此操作。

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

试试这个:

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

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

如果将WCF测试客户端替换为,则应该能够做到这一点。它是免费的,并且比MS的测试客户端更灵活。。。例如,如果您正在进行用户名验证,它将允许您指定用户名和密码。

在我的案例中,来自帮助的答案。请确保使用证书期望的确切计算机名称。例如,
machine/service.svc
可能不起作用,而
machine.domain/service.svc
-起作用。

您可以在开发区域创建一个非自签名证书,然后在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 makecert-r-pe-n“CN=我的根权限”-一个sha1-sky签名 -ss CA-sr当前用户 -塞浦路斯当局 -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 makecert-pe-n“CN=servername”-一个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.pfx
    导入IIS并设置网站绑定以使用此证书,还需要在
    本地计算机中安装
    CA.cer
    \
    受信任的根证书颁发机构
    存储在服务器和客户端中,通过执行此操作,WCF客户端将通过HTTPS没有任何问题。

    要回答您的问题。。。下面是如何强制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;
            }
    
    是的,这是可能的


    只需从服务()下载生成的WSDL,并在WCF测试客户端中添加服务时提供此文件的路径。

    我看不到任何方法将此代码添加到WCF测试客户端(我不控制代码)。我已经在自己的代码(服务器端)中添加了此调用。当然,如果您试图强制任何其他C#WCF客户端接受自签名安全证书,那么这正是正确的方法。您真漂亮!还有一个技巧是你可能会得到一个无效的密码错误,你可以通过在最后一行的命令行上传递密码来解决:pvk2pfx-pvk server.pvk-pi“yourpw”-spc server.cer-pfx server.pfx-po“yourpw”我在服务器上添加pfx时遇到了一个关于错误密码的错误,但我只是跳过了输入密码,一切似乎都正常。如果你和我一样,不喜欢下载你从未听说过的软件,下面是Visual Studio杂志对WFCSForm的评论。我的是另一种方式(在machine.domain中,当机器刚刚工作时失败)。谢谢我想他指的是WCFTestClient.exe。不管怎样,你的回答帮助了我的WCF测试客户端项目。