未解决-仍在寻找解决方案。
我正在通过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/