2011-06-22 32 views
6

實現使用傳輸級安全性與WCF通過HTTP web服務是很容易的:Enable SSL for my WCF service爲什麼通過net.tcp啓用SSL(傳輸安全性)比HTTP更難?

實施,超過的net.tcp使用傳輸級安全性與WCF Web服務是相當困難:WCF with netTcpBinding and Certificate transport security

...和解決方案的net.tcp通常涉及像這樣同時在服務器端和客戶端:

<serviceCertificate 
     findValue="MyServiceCertificate" 
     storeLocation="LocalMachine" 
     storeName="My" 
     x509FindType="FindBySubjectName" /> 

在HTTP的情況下,你不需要甚至提及客戶無論是在證書或服務器。在NET.TCP的情況下,您必須在我讀過的大多數源中的客戶端和服務器上存儲,查找和指定證書。

做什麼事情讓你不必擔心HTTP模式下的證書?而且,爲什麼在使用net.tcp時這種魔法不可用?

+0

爲什麼不能使用消息級安全性有什麼具體原因嗎? –

+0

我們無法使用消息級安全性沒有特定的原因。不過,我不知道爲什麼這會更容易實施。 –

回答

6

因爲通過HTTPS使用WCF時; IIS管理與證書的協商(就像普通的SSL一樣)。由於沒有爲TCP內置的IIS服務器,所以你必須自己做。您仍在使用證書+ WCF for HTTPS,但配置是在IIS中完成的。

編輯

對於客戶端,你還有其他的軟件。當通過SSL瀏覽網站時,瀏覽器正在爲您處理所有這些事情。基於HTTP的SSL具有標準的協商模式,因爲它是HTTPS協議的一部分。對於TCP,這不是協議的一部分,因此客戶端必須自己處理。

+0

這是我在服務器端的假設,但它只解釋了服務器端。這並不能解釋爲什麼事情在客戶端更難。爲什麼我讀的所有示例都涉及在客戶端存儲中存儲證書並調用SetCertificate [(如此處)](http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/050bc8a9-a9a2 -41dd-89ef-dbacbcc5b111 /)? –

+0

@Greg:查看修改。 – vcsjones

+1

除了兩點之外,這幾乎是合理的。首先,瀏覽器確實爲您處理了所有這些問題,但即使您沒有使用瀏覽器(只是帶有WCF客戶端代碼的Windows Forms應用程序),它仍然會爲您處理。所以,微軟必須爲我們處理它。他們只是不選擇在net.tcp情況下爲我們處理它?最後,如果你接受所有這些,那麼看起來TCP的額外工作就是實現你自己的證書處理。相反,我們看到的是人們在客戶端上安裝了全新的證書,甚至沒有出現在HTTP案例中。 –

0

我一直都很努力,現在終於覺得自己像個白癡。這很好,因爲這意味着我實際上理解了之前我只是在竊聽的內容。

實施您的服務時,您的目標是確保與SSL的通信。您還需要能夠在Visual Studio中生成reference.cs文件。你所遇到的問題是當你將元數據交換置於SSL綁定之下時。代碼生成工具不允許爲用於生成reference.cs文件時獲取元數據的調用配置必要的netTcpBinding配置部分。

您應該創建NetTcpBinding的,一個在兩個單獨的綁定配置爲與您的服務:內部

<security mode="TransportWithMessageCredential"> 
    <message clientCredentialType="Certificate"/> 
</security> 

配置,另一個爲:

<security mode="None" /> 

代替。確保所有其他設置匹配,服務的端點指向ssl bindingConfig,而元數據端點指向無SSL綁定。然後您將能夠讀取元數據並再次更新服務參考。

需要注意的一件事是,您應該將元數據綁定到任何prod版本。這可確保您不會暴露任何未通過SSL的內容。

相關問題