未解决-仍在寻找解决方案。

我正在通过SAML token 传递WCF调用:

Using SAML token with Web Service (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
        }
    }

当我让 fiddler 运行电话时,找到并返回了我的数据。

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

我怀疑当 fiddler 关闭时证书没有通过。

任何想法?

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

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

更新:
这是Fiddler的要求/响应:

隧道请求:

隧道响应:

协议(protocol)异常详细信息:

服务器证书请求后从客户端发送:

2014年12月8日更新:我想我在此链接中使用绑定(bind)获得了一次成功:
WCF custom binding that will support HTTPS, a signed certificate and a signed username token

我将进行更多更新,因为我不知道这在做什么。

最佳答案

由于此类场景(和问题)非常丰富,Eric Lawrence为此专门编写了一个blog post - Help! Running Fiddler Fixes My App???

帖子中的以下部分似乎与您的问题有关-

HTTPS问题

一些用户发现HTTPS通信仅在Fiddler正在运行并解密安全通信时才起作用。

证书错误

默认情况下,当连接到HTTPS站点时,Fiddler会警告您有关无效证书的信息:

查看原始帖子中的图片

如果您选择忽略此警告,则Fiddler将有效地“隐藏”来自客户端应用程序的证书错误,以便它仅看到Fiddler为HTTPS拦截生成的证书。

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

查看原始帖子中的图片

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

解决方法很简单:更正或替换服务器的证书。

关于c# - Fiddler On时,WCF调用正常工作,否则在调试时给出400错误请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27136366/

10-17 00:05