2009-07-28 263 views
4

我們目前有一組Web服務公開各種不同客戶端類型和角色的接口。SSL客戶端證書驗證優化

背景:

  • 認證通過SSL客戶端證書驗證處理。這是當前在web服務代碼(而不是HTTP服務器)中完成。我們不希望使用任何不如此安全的方案。這篇文章不是在談論授權,只是認證。
  • Web服務同時談論SOAP和REST(JSON),我絕對不想開始討論任何一種方法的優點。
  • 通過網絡服務暴露的所有操作都是無狀態的。

我的問題是,驗證每個請求上的客戶端證書是非常重量級的,並且很容易控制應用程序服務器上的CPU時間。我已經嘗試將身份驗證應用程序部分分離到不同的物理服務器上以減少負載,但這並不能提高總體調度速度 - 無論在哪裏完成,請求仍需要一段時間進行身份驗證。

我想嘗試通過生成一個HTTP cookie(與相關的服務器端會話)成功的客戶端證書驗證後,當由客戶端提供將導致客戶端證書驗證被跳過()雖然仍然通過SSL進行通話)。我還想限制會話時間,並儘可能從客戶的角度對流程進行透明化處理。

我的問題:

  1. 這是仍安全嗎? (以及我們如何優化安全性和實用性?)
  2. 這個方案是否有免費的實現? (我知道CA的SiteMinder產品)
  3. 鑑於上述情況,我們是否應該繼續在應用程序中執行身份驗證,還是轉移到服務器內?

回答

4

生成後 成功的客戶證書 驗證,一個HTTP cookie(具有 關聯的服務器端會話),其當由 提供的客戶端會造成客戶端 證書驗證要被跳過

這仍然是安全的嗎? (哪有 我們優化了安全和 實用主義?)

這是不是很安全的理論,因爲服務器不能再證明自己,有沒有一個人在這方面的中間人。

當客戶端提供客戶端證書時,服務器可以以加密方式信任它。客戶端和服務器應該是基於客戶端密鑰的加密和數據(以及會話密鑰)。如果沒有客戶端證書,服務器只能希望客戶在驗證服務器證書方面做得很好(如客戶所感知的那樣),這樣做可以消除MitM先生的可能性。

開箱即用的Windows客戶端信任超過200個根CA證書。在沒有客戶端證書的情況下,服務器最終會通過擴展信任。

下面是如何尋找一個數據包捕獲來驗證客戶端證書的提供防禦MITM一個很好的新手必看: http://www.carbonwind.net/ISA/ACaseofMITM/ACaseofMITMpart3.htm

這種類型的中間人的解釋。 http://www.networkworld.com/community/node/31124

這種技術實際上被一些防火牆設備盒用來對SSL進行深入檢查。

MitM過去看起來像一個很大的任務不可能的生產,花了很多時間。真的,儘管它並不僅僅是一個受損的DNS解析器或路由器。世界上有很多小的Linksys和Netgear盒子,可能其中有兩三個沒有最新的安全更新。

實際上,這對主要金融機構的網站似乎已經足夠了,儘管最近的證據表明他們的風險評估策略並不理想。

這個方案是否有免費的實現? (我知道CA的SiteMinder產品)

只是一個客戶端cookie,對吧?這似乎是每個Web應用框架的一個非常標準的部分。

鑑於上述情況,我們是否應該繼續在應用程序中執行身份驗證,還是轉移到服務器內?

硬件加密加速器(SSL代理前端或加速卡)可以顯着提高速度。

將證書驗證移入HTTP服務器可能會有所幫助。無論如何,你可能會在密碼算法中做一些重複。

看看你是否會受益於更便宜的算法或客戶端證書上的較小密鑰大小。

驗證客戶端證書後,您可以在短時間內嘗試緩存它的哈希摘要(或甚至整個事物)。這可以使您不必在每次擊中時都要重複簽名驗證。

客戶交易的頻率如何?如果構成大部分交易的交易頻繁地觸及您,您可能能夠說服他們在單一SSL協商/認證中合併多筆交易。看看設置HTTP Keep-Alive頭。他們可能已經在一定程度上做到了這一點。也許你的應用程序正在對每個HTTP請求/響應進行客戶端證書驗證,或者在每個會話開始時進行一次驗證?

無論如何,這些都是一些想法,祝你好運!

+0

感謝您順便問一下。當同一個問題出現在同一天三次稍微不同的情況下(!),我開始深入挖掘。原來,答案有一點涉及:http://extendedsubset.com/?p=8 – 2009-11-07 07:20:27