2012-10-10 83 views
1

我一直在試圖讓WCF客戶端與使用TransportWithMessageCredential的IIS託管WCF服務進行通信。WCF客戶端錯誤「私鑰在X.509證書中不存在」

在這種情況下,我們將有大約20個客戶端全部運行客戶端應用程序。計劃他們將使用相同的證書與我們的服務器進行通信以提供加密(識別是單獨處理的)。我們的服務器根網站已經配置了證書。 WCF服務將從一個子站點運行,我希望使用這個相同的證書來保護從我們的客戶端應用程序到服務的訪問。

如果我在客戶端安裝PFX證書,一切都很好。但我不想從我們的服務器中導出私鑰 - 這不是一個安全問題嗎?

如果我安裝一個CER證書文件,運行我的客戶端應用程序,我得到的錯誤 - 「專用密鑰是不存在的X.509證書」 - 因爲我沒有一個出口

也許聽起來很合理我錯過了一些東西;我已經搜索了很多,並且大多數解決方案都聲明導出私鑰。

有沒有任何方法可以在不從我們的服務器中導出私鑰的情況下使用CER證書文件?或者什麼被認爲是最佳實踐。

感謝您的任何建議。

回答

1

我需要一個答案完全相同的問題...

似乎太可笑了以後要這麼麻煩來加密與128位密鑰的東西,通過首字母縮寫詞的難以辨認的混亂涉水,用質數作爲大到等於我的信用卡餘額等等......在你遇到麻煩之後,你會把你的私鑰導出到每一臺客戶端機器上,只受證書文件上的一個(可能是不安全的)密碼的保護。瘋狂的事情。無意義。

有一點需要記住的是,服務器和客戶端都需要解密消息,解密需要顯式的私鑰。

所以他們只有這樣才能看到,以避免將服務器的私鑰傳送給所有人,並且雜項是要有2個不相關的證書,一個用於服務器,一個用於客戶端。

當客戶端向服務器發送消息時,客戶端僅使用服務器的公鑰進行加密。服務器然後使用其私鑰解密。

當從服務器向客戶端發送消息(或更多回復)時,服務器使用客戶端的公鑰進行加密,並且客戶端使用自己的私鑰進行解密。瞧?

至少這樣,服務器的私鑰永遠不會被釋放到服務器之外。然而,客戶私鑰仍然在任何地方發貨。

我覺得那麼它歸結到與不同程度的滿足處理4種情景 -

1)消息從客戶端發送到服務器 - 味精使用加密服務器的公鑰。服務器證書必須在客戶端上可用。服務器私鑰不一定存在。由於服務器的公鑰易於訪問,所以對於通俗客戶端來說,加密並向服務器發送消息相對容易。

2)在服務器上收到消息 - 使用服務器的私鑰對消息進行解密。這個私鑰只駐留在服務器上,因此非常安全(物理安全性?)。包含私鑰的服務器證書不應該被其他人訪問,除非您將副本放在公共FTP文件夾中,或者啓用遠程訪問或者其他方式。即使有人獲得了服務器證書,他們仍然需要猜出你的輝煌密碼嗎?順便說一句,我不知道密碼保護的證書文件可以「破解」。

3)回覆從服務器發送到客戶端 - msg使用客戶端的公鑰加密。所以服務器需要客戶端證書(不需要私鑰)。客戶端公鑰在任何地方都很容易獲得,因此從客戶端到服務器攔截原始msg,忽略其內容(因爲您無法在沒有服務器私鑰的情況下解密它),併發送某種加密響應回到客戶端,看看客戶是如何解釋它的。樂趣。

4)客戶端收到的服務器回覆 - 使用客戶端的私鑰解密msg。這個私鑰在所有的客戶端機器上,在證書文件中,只有一個密碼保護......所以它相對不安全。

當然,如果您不太擔心安全問題,另一種選擇是將服務器證書隨處發送(包括服務器私鑰),並將其用作服務器和客戶機證書。我相信很多人都這麼做。

這個答案包含一點點的猜測&點加入,因爲我找不到一個清晰的解釋。我有興趣知道我是否接近。

============================================== ===================================

更新:在那裏 - http://msdn.microsoft.com/en-us/library/ms733102.aspx