2008-11-11 58 views
6

我的WCF服務涉及在客戶端和服務之間發送數據集(採用csv格式)數據。該數據集必須加密,以便數據不會被攔截。我使用的WSHttpBinding,並試圖通過在web.config中使用以下設置到消息加密:WCF - 如何加密郵件?

<wsHttpBinding> 
    <binding name="wsHttp"> 
    <reliableSession enabled="true" /> 
    <security mode="Message"> 
     <message clientCredentialType="UserName" algorithmSuite="TripleDes" /> 
    </security> 
    </binding> 
</wsHttpBinding> 

當我嘗試並生成客戶端代理,我得到一個長的錯誤消息框(不能因爲它完全讀離開屏幕底部!)。該錯誤消息確實提到了有關「未提供服務證書」的內容。

如何加密郵件?我需要證書嗎?我要指出,這項服務將通過互聯網從不同的域使用,所以我不知道是否使用「用戶名」安全是最好的選擇(?)

基本上我很困惑!

回答

4

是的,您的服務需要一個證書,以便您的加密密鑰可以安全地交換。您可以使用makecert.exe創建測試服務身份驗證證書。有關詳情,請參閱this entry in my blog

你還需要確保你的服務正在運行的帳戶可以讀取該證書的私鑰文件。如果您使用的是Windows Vista(或更高版本),則證書MMC管理單元允許您控制該私鑰的權限,但對於早期版本的Windows,則更難一些。我曾經使用WSE3附帶的實用程序,但其他人可能會提出更直接的方法。除非您的服務以管理員身份運行,否則您很可能必須調整這些權限。

更新:像所有的好東西,我的博客結束了。感謝makerofthings7提醒我。你需要生成一個服務認證證書是這樣的makecert命令

makecert -sr LocalMachine -ss My -pe -n CN=subject-name -eku 1.3.6.1.5.5.7.3.1 -sky exchange 

...簡單地用有意義的爲您服務的任何證書的名稱替換主題名稱

+0

鏈接不再有效... – LamonteCristo 2011-04-08 04:58:12

4

@Martin是對的,你需要在服務器上的證書。 This link對基於消息的安全性的通信流程有很好的概述並且有示例代碼。 This link對使用​​證書有很好的概述。

爲了您authenication要求,this link回顧了各種可用的選項。如果您是WCF的新手,學習WCF:Michele Bustamante的動手指南是一本很好的書,它涵蓋了基於消息的安全性。

1

我仍在試圖找到解決這個問題的方法。我也有,但簽署了一個XML。仍然可以在WinXP開始>右鍵點擊我的電腦>管理>服務和應用程序>服務> IIS管理>雙擊並在登錄選項卡它通常會說本地系統找到用戶IIS。

編輯

OK,這是我如何解決我的問題。我有一個證書,我用這個article 來證明。如果項目是保存到C文件夾中的ASPWebSite,則可能沒有問題。但是,如果它作爲HTTP項目保存到IIS,那麼您將遇到問題。

經過幾周的調查,解決問題的方法並不難。微軟有一種叫做Web Services Enhancements的東西,你會下載最新版本,但我正在使用最新的Service Pack。當我安裝我啓用了一切。

證書可以位於物理文件中,但通常位於證書管理存儲中,以便使用WSE 2.0中的工具X509證書工具。這裏通過在不同的部分查找證書直到找到證書爲止。然後打開它,在底部會有一個View Private Key,在安全選項卡中添加LOCALHOST \ ASPNET。這應該使您的網站能夠讀取證書。

總之,當你創建公鑰和私鑰時,儘管你可能會看到私鑰沒問題,但它確實發送給文件系統中的Timbuktu,你需要找到它來添加ASPNET帳戶用於讀取訪問。我閱讀比Vista更容易,但我使用XP。