当Fiddler On时WCF调用工作,否则在调试时给出400 Bad Request

gbs*_*gbs 10 c# wcf wif

没解决 - 仍在寻找解决方案.

我正在通过SAML令牌传入WCF调用:

将SAML令牌与Web服务一起使用(wsdl)

private static string serviceEndpoint = "https service endpoint";
    public static void CallProviderService(SecurityToken token)
    {
        var binding = new WS2007FederationHttpBinding(WSFederationHttpSecurityMode.TransportWithMessageCredential);
        binding.Security.Message.EstablishSecurityContext = false;
        binding.Security.Message.IssuedKeyType = SecurityKeyType.BearerKey;

        var channelFactory = new ChannelFactory<ISomeProviderService>(binding, new EndpointAddress(new Uri(serviceEndpoint)));
        string thumb = "mycertthumbprint";
        channelFactory.Credentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindByThumbprint, thumb);
        channelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust;
        channelFactory.ConfigureChannelFactory();
        channelFactory.Credentials.SupportInteractive = false;

var elements = service.Endpoint.Binding.CreateBindingElements();
elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true;
service.Endpoint.Binding = new CustomBinding(elements);

        var channel = channelFactory.CreateChannelWithIssuedToken<ISomeProviderService>(token);

        try
        {
            var response = channel.MyServiceMethod(somedataobject);
        }

        catch (Exception ex)
        {
           //log message
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我有小提琴手跑步时,工作找到并返回给我数据.

关闭fiddler,我的catch块中出现400 Bad Request错误.

我怀疑当Fiddler关闭时,证书没有通过.

任何的想法?

注意:我有一个.wsdl,我用它来使用Visual Studio创建代理类 - >添加服务引用.

问题:如何在进行此https服务呼叫时检查是否使用了已安装的证书?

更新: 以下是来自Fiddler的Req/Response:

隧道要求: 隧道申请

隧道响应: 隧道响应

协议异常详细信息:

在此输入图像描述

服务器证书请求后从客户端: 在此输入图像描述

2014年12月8日更新:我认为我在此链接中使用绑定有一次成功: 支持HTTPS的WCF自定义绑定,签名证书和签名用户名令牌

我会更新更新,因为我不知道这是做了多少.

Vik*_*pta 5

由于这些场景(和问题)非常丰富,Eric Lawrence撰写了一篇博文 - 帮助!运行提琴手修复我的应用程序??? ,就是为了这个.

从帖子的以下部分看来,与您的问题相关 -


HTTPS问题

一些用户发现HTTPS流量仅在Fiddler运行和解密安全流量时有效.

证书错误

默认情况下,Fiddler会在连接到HTTPS站点时向您发出有关无效证书的警告:

查看原始帖子中的图片

如果您选择忽略此警告,Fiddler将从客户端应用程序中有效地"隐藏"证书错误,这样它只会看到为HTTPS拦截生成的证书Fiddler.

大多数浏览器遇到无效证书时会显示有意义的错误消息:

查看原始帖子中的图片

...但许多应用程序将无提示失败或出现令人困惑的错误消息.即使在浏览器中,有时也不会显示错误消息(例如,在使用XmlHttpRequest时).

这里的修复很简单:更正或替换服务器的证书.


pau*_*lem 2

检查证书。

可能有两个客户端证书。用于 TLS 会话的一个和用于 SAML 令牌/SOAP 消息的一个。通常它们是相同的证书。而是由代码的不同部分添加的。

Fiddler 只知道 TLS 证书。如果您必须将 TLS 客户端证书添加到 fiddler,那么确实可能是这样。测试很简单,从Fiddler目录中删除即可。如果它停止工作......

如果您想查看 TLS 客户端证书,那么您可以使用您最喜欢的网络跟踪工具(NetMon、MessageAnalyser、WireShark 等)进行跟踪。将其放在传出网络适配器上并查看 TLS 消息中的差异。您可能必须将私钥提供给跟踪工具。因为客户端证书是在已经加密的情况下交换的......

另一种选择是使用 Schannel 内置跟踪,但我没有时间弄清楚它是如何工作的,因为网络跟踪在我的测试环境中始终是可能的。