[英]WCF call working when Fiddler On, else gives 400 Bad Request while debugging
沒解決 - 仍在尋找解決方案。
我正在通過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
}
}
當我有小提琴手跑步時,工作找到並返回給我數據。
關閉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內置跟蹤,但我沒有時間弄清楚它是如何工作的,因為在我的測試環境中總是可以進行網絡跟蹤。
您可以從以下選項切換證書驗證模式並嘗試 -
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.