2011-09-02 178 views
3

大部分情況下,我的混淆似乎是從我嘗試理解WCF上下文中的安全性開始的。在WCF中,看起來證書可以用於認證和加密。基本上,我試圖瞭解:證書,加密和身份驗證

  1. 如何將X509證書用作身份驗證令牌?通常沒有ssl證書是公開可用的嗎?這不會使它們無法用於認證目的嗎?如果沒有,是否有一些常用於此目的的協議?
  2. 使用WCF對消息進行加密時,僅使用發給客戶端的證書,僅發送給服務器,還是發送給兩者?如果同時使用客戶端和服務器的證書,我爲什麼會有點不清楚。這主要來自我對https的理解,在這種情況下,只有頒發給服務器的證書(並鏈接到根CA頒發的某些證書​​)才能建立加密連接並驗證服務器。

我不完全確定這是正確的論壇。我的問題源自嘗試理解WCF,但我想我想理解這一般背後的理論。如果這是個好主意,請爲我建議正確的論壇。如果有必要,我很樂意嘗試遷移此問題。

在此先感謝!

回答

8

那麼這是相當複雜的問題。我會嘗試解釋一些部分,但儘可能避免更多細節(即使在這之後它會很長)。

認證證書如何工作?

如果私鑰持有者簽署了一些數據,其他參與者可以使用簽名者的公鑰來驗證簽名。這種機制可以用於認證。私鑰和公鑰存儲在證書中,私鑰在證書機器上保持安全,而帶公鑰的證書可以公開獲得。

它與HTTPS有什麼關係?

WCF提供傳輸和消息安全。它們之間的區別描述爲here。 HTTP中的傳輸安全性是HTTPS,其中只有服務器需要頒發證書,而客戶端必須信任此證書。此證書既用於向客戶端驗證服務器,又用於建立安全通道(使用對稱加密)。

HTTPS還提供了名爲Mutual HTTPS的變體,其中客戶端必須同時頒發證書並且客戶端使用證書向服務器進行身份驗證。

郵件安全性如何工作以及該場景中兩個證書的用途是什麼?

在消息安全的情況下,每個消息分別進行簽名,加密和驗證=所有這些安全信息都是消息的一部分。在SOAP的情況下,這是由許多規範描述的,但通常您對安全綁定和X.509令牌配置文件感興趣。

安全綁定是WS-SecurityPolicy斷言的一部分,它描述瞭如何保護消息。我們有三個綁定:

  • 對稱安全綁定 - 對稱加密
  • 非對稱安全綁定 - 非對稱加密
  • 交通運輸安全綁定 - 斷言消息必須發送通過HTTPS或其他安全運輸

X.509令牌配置文件指定如何在消息中傳輸證書(公鑰)以及如何使用它們。

現在,如果你有對稱安全綁定,您只需要服務器證書因爲

  • 當客戶要發送消息,它會首先生成隨機密鑰服務器。
  • 它將使用此密鑰來加密和簽署請求
  • 它將使用服務證書來加密派生密鑰並將其傳遞給請求。
  • 當服務器收到該消息時,它將首先使用其私鑰解密該密鑰。
  • 它將使用解密的密鑰來解密其餘的消息。
  • 它也將使用密鑰來加密響應,因爲客戶端知道該密鑰。
  • 客戶端將用於請求生成相同的密鑰來解密所述響應

這是對稱加密這是更快更然後非對稱加密,但密鑰推導不應該在的WS-Security 1.0可用。它在WS-Security 1.1中可用。 HTTPS在內部以類似的方式工作,但關鍵在整個連接壽命期間是相同的。

如果你有非對稱安全綁定,你需要兩個證書:

  • 發起人必須有自己的證書用於簽名的請求和解密響應
  • 收件人必須用於解密請求和簽署響應自己的證書

這意味着下面的算法

  • 發起加密的請求與接收方的公鑰
  • 發起跡象用自己的私鑰
  • 收件人要求使用發起者的公鑰來驗證請求籤名
  • 收件人使用其私鑰解密請求
  • 收件人使用發起者的公鑰加密響應
  • 收件人使用其私鑰簽名響應
  • 啓動器使用接收方的公鑰來驗證簽名響應
  • 發起方使用其私鑰來解密響應

簽名和加密的順序是可以改變的 - 還有另外一個WS-安全斷言它說什麼,應先進行。

這些都是基礎知識。它可以是複雜得多,因爲信息安全實際上是讓你儘可能多的證書,你想要的 - 例如,你可以使用認可標記與其他證書籤名初級簽名等

+0

謝謝,這有助於!在閱讀你的解釋之後,我覺得我能夠更好地理解如何從安全的角度來配置wcf。您還提到了各種協議,如果需要,我可以查找更多信息,並且您在理論上做得很好。再次感謝! – Andrew

1

證書只有一個公共的公鑰/私鑰對。它沒有私鑰 - 這與證書本身是分開的。當您連接到HTTPS服務器,你可以相信該服務器是證書的所有者,因爲服務器必須拿着私鑰(希望別人擁有它),否則SSL連接是不可能。如果服務器未持有私鑰其證書的公鑰對,它不能採用有效的SSL連接爲您呈現。

然後,您可以決定是否不信任根據已經簽署的證書鏈的一個或多個證書頒發機構(CA)的特別證書。例如,可能只有一個CA簽署了此證書。你有一個信任的CA根證書在本地,所以你知道,這其實是你信任的CA簽署該服務器證書,因爲這簽名不可能除非CA 舉行的私鑰的CA證書。再一次它只是持有私鑰,在這種情況下證明誰簽了證書。這就是你可以信任證書的方式。

當您在SSL連接上提供可選的客戶端證書時,服務器可以信任您,因爲1)它可以看到簽名客戶端證書的CA(或CA),以及2)它可以告訴您擁有您的私人因爲否則SSL連接將不可能。所以它也適用於信任客戶端的服務器。

如果您相信服務器和客戶端保持私鑰私密,並且您信任簽署服務器和客戶端證書(或證書鏈)的根證書源,則可以說每個人都誠實。