没解决 - 仍在寻找解决方案.
我正在通过SAML令牌传入WCF调用:
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自定义绑定,签名证书和签名用户名令牌
我会更新更新,因为我不知道这是做了多少.
由于这些场景(和问题)非常丰富,Eric Lawrence撰写了一篇博文 - 帮助!运行提琴手修复我的应用程序??? ,就是为了这个.
从帖子的以下部分看来,与您的问题相关 -
HTTPS问题
一些用户发现HTTPS流量仅在Fiddler运行和解密安全流量时有效.
证书错误
默认情况下,Fiddler会在连接到HTTPS站点时向您发出有关无效证书的警告:
查看原始帖子中的图片
如果您选择忽略此警告,Fiddler将从客户端应用程序中有效地"隐藏"证书错误,这样它只会看到为HTTPS拦截生成的证书Fiddler.
大多数浏览器遇到无效证书时会显示有意义的错误消息:
查看原始帖子中的图片
...但许多应用程序将无提示失败或出现令人困惑的错误消息.即使在浏览器中,有时也不会显示错误消息(例如,在使用XmlHttpRequest时).
这里的修复很简单:更正或替换服务器的证书.
检查证书。
可能有两个客户端证书。用于 TLS 会话的一个和用于 SAML 令牌/SOAP 消息的一个。通常它们是相同的证书。而是由代码的不同部分添加的。
Fiddler 只知道 TLS 证书。如果您必须将 TLS 客户端证书添加到 fiddler,那么确实可能是这样。测试很简单,从Fiddler目录中删除即可。如果它停止工作......
如果您想查看 TLS 客户端证书,那么您可以使用您最喜欢的网络跟踪工具(NetMon、MessageAnalyser、WireShark 等)进行跟踪。将其放在传出网络适配器上并查看 TLS 消息中的差异。您可能必须将私钥提供给跟踪工具。因为客户端证书是在已经加密的情况下交换的......
另一种选择是使用 Schannel 内置跟踪,但我没有时间弄清楚它是如何工作的,因为网络跟踪在我的测试环境中始终是可能的。