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

Law*_*ton 28 ssl wcf wcftestclient self-signed ssl-certificate

我有一个使用自签名证书在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安全通道建立信任关系.底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.根据验证程序,远程证书无效.HTTP GET错误URI:https:///Service1.svc下载"https:///Service1.svc"时出错.底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.根据验证程序,远程证书无效.

编辑:此问题具体是关于使用WCF测试客户端使用自签名证书测试已通过SSL保护的Web服务.服务器已经设置为接受所提供的任何证书,这是WCF测试客户端我没有看到这样做的方法.

小智 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

现在您只需要导入server.pfx到IIS并设置网站绑定以使用此证书,并通过执行此操作在服务器和客户端中安装CA.cerin Local Computer\ Trusted Root Certification Authoritiesstore,WCF客户端将通过HTTPS使用该服务而没有任何问题.

  • 你美丽!另一个技巧是你可能会得到一个无效的密码错误,你可以通过在最后一行的命令行上传递密码来解决:pvk2pfx -pvk server.pvk -pi"yourpw"-spc server.cer -pfx server.pfx -po "yourpw" (3认同)

War*_*mak 5

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

  • 如果您像我一样,不喜欢下载从未听说过的软件,请参阅 Visual Studio 杂志对 WFCStorm 的评论。http://visualstudiomagazine.com/articles/2012/10/29/free-tool-wcfstorm.aspx (5认同)

rgu*_*wan -4

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

尝试这个:

ServicePointManager.ServerCertificateValidationCallback +=
            new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck);
Run Code Online (Sandbox Code Playgroud)

回电:

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