2014-10-27 108 views
3

我正在嘗試使用另一家公司公佈的服務。有關身份驗證和通信規格爲:使用證書進行雙向SSL的WCF驗證錯誤

  • SOAP
  • HTTPS與相互SSL身份驗證(雙向SSL)
    • 使用公共證書,他們給我們(我使用的ServiceCertificate)
    • 使用,他們給我們創造了一個專用證書(我使用的ClientCertificate)
  • 的WS-Security與用戶名令牌

下面的代碼,我跟到現在爲止:

WSHttpBinding binding = new WSHttpBinding(SecurityMode.Transport); 
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
binding.SendTimeout = binding.CloseTimeout = binding.ReceiveTimeout = binding.OpenTimeout = new TimeSpan(0, 15, 0); // 15 minutes 

Uri uri = new Uri(input.ServiceAddress); 
EndpointAddress endpointAddress = new EndpointAddress(uri); 

// Client creation 
using (Client client = new Client(binding, endpointAddress)) 
{ 
    client.ClientCredentials.ClientCertificate.Certificate = input.PrivateCertificate; 
    client.ClientCredentials.ServiceCertificate.DefaultCertificate = input.PublicCertificate; 

    client.Open(); 

    // Service call 
    ResponseType response = client.ServiceCall(params); 
} 

我得到這個錯誤時,該服務被稱爲:

同時使HTTP請求時出錯服務。這可能是由於在HTTPS情況下服務器證書未使用HTTP.SYS正確配置。這也可能是由於客戶端和服務器之間的安全綁定不匹配造成的。

,我已經嘗試過的東西:

  • 添加此行的代碼: 「System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;」
  • 發現在註冊使用Netsh
    • 使用此命令端口公證書:「netsh的HTTP添加的sslcert ipport = 0.0.0.0:443 CERTHASH = 證書指紋的appid = {應用GUID}」基於另外一個問題,我們在另一個項目中有

我不知道如何解決這個問題,我對此一無所知!已經搜索了很多,我嘗試的一切都沒有做到!

+1

儘管我不能告訴你什麼是錯誤的,但我可以告訴你SSL3&netsh位可能出現什麼問題:它們可能在最近的獅身人面像攻擊後關閉了SSL3。您應該檢查SSL握手中提供的協議和密碼(我假設您的瀏覽器至少信任SSL證書),然後查看是否啓用了這些密碼。Netsh位與服務器端無關,因此客戶端會完全忽略該位,除非您在本地運行服務器。您可以使用https://www.ssllabs.com/來測試服務器端發送的內容以及客戶端的內容。 – Maverik 2014-10-27 15:28:09

+0

跑出字數限制:當我說最近的獅子狗襲擊時,我的意思是在新聞中,而不是在特定的第三方。 – Maverik 2014-10-27 15:28:51

+0

@Maverik,謝謝!我有一本手冊解釋了認證和連接的要求。我知道我已經寫過這個問題,但我會試着再問一些。可悲的是,ssllabs在檢查域名時遇到了意外的錯誤,但服務器證書(我所說的公共證書)在那裏,其中一個使其信任(VeriSign)。 – 2014-10-27 20:32:51

回答

0

我們的基礎設施存在一些網絡問題。一旦我們的安全層離開了我的機器,服務即告解決。

我猜證書(可能是密鑰)沒有通過網絡,我得到的錯誤(因爲它不是驗證)。