2013-02-18 61 views
2

我有一個應用程序與幾個war文件都部署在同一個tomcat服務器上。我只需要爲一個戰爭上下文強制客戶端身份驗證,並且只能針對特定的URL。配置tomcat僅用於特定的URL模式的客戶端身份驗證

我讀過網絡和這裏類似的問題就很多,但我已經達到的解決方案不匹配的結論,我需要:

  1. 定義2個連接器具有不同的端口(其中一個與clientAuth啓用和一個沒有),並訪問特定的URL與相關的端口==>這種解決方案是不好的,因爲如果黑客試圖訪問這個URL與其他端口,他可以成功
  2. 定義傳輸保證在web.xml中示例Enabling mutual SSL per service in Tomcat)==>這也不是很好,因爲我不想在某些領域定義用戶,我只希望服務器請求客戶端證書並驗證它是否爲tru sted和有效。

有沒有辦法使用選項2而不定義用戶?或者可能是第三種選擇?

在此先感謝!

回答

1

你不能在純粹的Tomcat中做到這一點。最好的解決方案是在它之前放置一個Apache HTTP,這會終止SSL連接,並且可以在其中將SSL的內容配置到個人目錄的級別。

1

如果你想接受來自受信任的CA的任何證書,只要把clientAuth="want"Connector,寫一個過濾器來檢查,如果證書被髮送。只將該篩選器分配給所需的Web應用程序。在過濾器中,獲取證書使用:

request.getAttribute("javax.servlet.request.X509Certificate"); 

並檢查它是CA.

但請記住,來自該CA的任何證書都將允許訪問。如果這是公共CA,任何人都可以購買並訪問您的應用。你應該總是檢查DN,在Tomcat中你可以通過定義一個用戶來做到這一點,或者手動在過濾器中進行。

相關問題