【问题标题】:WCF service self signed certificate invalid on localhost in iisWCF 服务自签名证书在 iis 中的 localhost 上无效
【发布时间】:2017-11-02 21:19:26
【问题描述】:

这是我第一次创建 WCF 服务。我需要使用 HTTPS,因为我将使用 MembershipBinding。到目前为止,我采取的步骤是:

  1. 使用 makecert.exe 应用程序创建了一个证书颁发机构 - 我由此创建了一个服务器证书和一个客户端证书。
  2. 将证书颁发机构添加到 Microsoft 管理控制台中的受信任的根证书颁发机构。
  3. 将客户端和服务器证书添加到我在 Microsoft 管理控制台中的个人证书中。
  4. 使用服务器证书在 IIS 中为服务创建了 https 绑定。
  5. 在服务器证书上为应用程序池设置适当的权限。
  6. 在 web.config 的 serviceBehaviours 节点中定义了服务证书。

我现在正在使用 WCF 测试客户端测试服务,但我收到了以下消息:

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

该错误表明信任证书存在问题,但我信任用于创建它的证书颁发机构,所以我不知道如何解决它。当我使用 http 时,该服务运行良好。

提前致谢。

【问题讨论】:

    标签: web-services wcf iis https ssl-certificate


    【解决方案1】:

    由于您的证书是自签名的,您需要在客户端调用中添加 hack:

    using (MyWCFServiceClient client = new MyWCFServiceClient())
    {
    
    #if DEBUG
        ServicePointManager.ServerCertificateValidationCallback = TrustAllCertificatesCallback;
    #endif
    
        client.MyCall();
    }
    

    以及 TrustAllCertificatesCallback 的定义:

    internal static bool TrustAllCertificatesCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
    {
        bool isValid = true;
        // TODO logic to check your self-signed certifiacte
    
        return isValid;
    }
    

    应该在您的生产环境中停用 TrustAllCertificatesCallback 回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2012-12-11
      • 2012-07-06
      相关资源
      最近更新 更多