2012-07-17 104 views
2

我有一個WCF服務正在用作我們正在與之集成的第三方asmx服務的包裝。它正在與之通信的服務是使用Visual Studio中的「添加服務」引用對話框添加的。 WCF服務中的代碼在單元測試中執行時工作,並且在調試Host應用程序時也可以工作。在IIS中運行時WCF服務無法連接到Web服務

調試主機在ASP.NET開發服務器中運行時,它可以正常工作。當我將應用程序部署到本地IIS實例(同開發機,IIS 5.1),該服務將啓動和運行,但連接OT第三方ASMX端點時,它拋出這個錯誤:

System.ServiceModel.Security.SecurityNegotiationException: 
Could not establish trust relationship for the SSL/TLS secure channel with 
authority 'xxxxx.thirdparty.com'. ---> System.Net.WebException: The underlying 
connection was closed: Could not establish trust relationship for the SSL/TLS 
secure channel. ---> System.Security.Authentication.AuthenticationException: 
The remote certificate is invalid according to the validation procedure. 

這些設置在服務端點的配置文件中:

<basicHttpBinding> 
    <binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
    useDefaultWebProxy="false" proxyAddress="http://[internalWebProxyHere]"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
    <security mode="Transport"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
     <message clientCredentialType="UserName" algorithmSuite="Default"/> 
    </security> 
    </binding> 
</basicHttpBinding> 

該服務在Visual Studio中工作,但不在部署到IIS之後。我能做些什麼來調試AuthenticationExceptions?

編輯:客戶端的端點是這樣的:

<endpoint address="https://'xxxxx.thirdparty.com/thirdpartyendpoint.asmx" 
    binding="basicHttpBinding" bindingConfiguration="ServiceSoap" 
    contract="eContracting.ServiceSoap" name="ServiceSoap" 
    behaviorConfiguration="Behavior"/> 

我嘗試添加的終結點行爲來禁用證書驗證,但這並沒有幫助:

<behavior name="Behavior"> 
    <clientCredentials> 
    <serviceCertificate> 
     <authentication certificateValidationMode="None"/> 
    </serviceCertificate> 
    </clientCredentials> 
</behavior> 

如果這也有助於第三方證書由Rapid SSL CA頒發,證書有效。查看我的本地證書存儲區,此證書位於「中級證書頒發機構」選項卡中,但不在「受信任的根證書頒發機構」或「受信任的發佈者」中。

編輯:該問題已通過將證書添加到「受信任的根證書頒發機構」得到解決,儘管存在一個問題。

  1. 從ControlPanel導入證書 - > InternetProperties - > Content - >證書。如果以這種方式安裝,則表示它已成功,但不會在winhttpcertcfg中顯示。
  2. 通過執行導入證書開始 - >運行 - >鍵入'certmgr.msc'並通過這裏安裝。它會說成功導入,但證書不可用於winhttpcertcfg。
  3. 通過開始 - >運行 - > MMC導入證書並使用證書snapin工作正常。點擊here查看Windows XP的說明。

具體來說,這是什麼工作:

  1. 開始 - >運行 - > MMC
  2. 文件 - >添加/管理單元
  3. 單擊添加刪除...
  4. 選擇證書並單擊添加
  5. 選擇計算機帳戶然後單擊下一步
  6. 選擇本地計算機,然後單擊Finish(完成)
  7. 單擊關閉
  8. 導入證書從控制檯根到以下地點:

    • 受信任的根證書頒發機構
    • 中級證書頒發機構
    • 第三方根證書頒發機構
+1

是本地計算機上的「本地」IIS實例(與您正在開發的計算機相同)還是您的網絡等的「本地」。 – 2012-07-17 17:31:46

+1

本地機器。 – 2012-07-17 17:34:15

+0

什麼是客戶端設置? – 2012-07-17 18:24:29

回答

2

嘗試啓用的服務web.config中跟蹤。通過將switchValue設置爲詳細,您可能會發現更詳細的錯誤。也許證書有問題。

Configure and Enable Tracing

您也可以嘗試該服務證書驗證模式設置爲none。

X509ServiceCertificateAuthentication.CertificateValidationMode Property

另一種選擇是導入快速SSL CA到受信任的根證書頒發機構在本地計算機上。我懷疑卡西尼沒有證實或忽略證書。

另一個可能的問題是,您的服務運行的帳戶IIS可能沒有權限從證書存儲中讀取。

+1

我試圖添加到受信任的根證書頒發機構商店,但它沒有幫助。我會在這裏指責內部代理服務器,除非它在通過Cassini運行時起作用。我曾嘗試開啓追蹤,但它記錄了相同的錯誤,沒有新的信息。 – 2012-07-17 20:12:17

+0

你在使用什麼操作系統? – 2012-07-17 21:49:04

+1

XP。看起來這是證書未正確安裝的問題。當我從命令行運行winhttpcertcfg -l -c LOCAL_MACHINE \ Root -s「RapidSSL CA」時,出現錯誤「錯誤:無法找到或獲取請求證書的上下文」。當我父證書頒發運行此命令將返回「匹配的證書: CN = GeoTrust的全球CA O = GeoTrust的公司 C = US 錯誤:未能成功私鑰獲得訪問 這不僅可以由安裝證書的用戶完成。「看起來這是XP的問題和不正確安裝的證書。 – 2012-07-18 13:23:49