簡體   English   中英

當Fiddler On時WCF調用工作,否則在調試時給出400 Bad Request

[英]WCF call working when Fiddler On, else gives 400 Bad Request while debugging

沒解決 - 仍在尋找解決方案。

我正在通過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
        }
    }

當我有小提琴手跑步時,工作找到並返回給我數據。

關閉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內置跟蹤,但我沒有時間弄清楚它是如何工作的,因為在我的測試環境中總是可以進行網絡跟蹤。

您可以從以下選項切換證書驗證模式並嘗試 -

  1. ChainTrust
  2. 沒有
  3. PeerOrChainTrust
  4. PeerTrust

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM