2011-01-14 121 views
6

我想在僅需要部分站點(特定URL)的客戶端證書的HTTPS站點上的Jetty中運行Servlet。例如:Jetty需要通過URL的SSL客戶端證書

https://example.com/someservlet/public - 無客戶端證書所需 https://example.com/someservlet/protected - 客戶端證書所需

在Apache中我可以通過指定SSLVerifyClient require一個<Directory><Location>這迫使Apache來重新協商SSL連接內完成這一任務的請求之後。

我不想在其他任何地方運行Jetty,只是單獨運行。這可能嗎? Servlet可以直接導致這種情況嗎?可以通過配置完成嗎?

回答

3

據我所知,您只能在每個端口的基礎上指定SSL選項。

即使您嘗試實現的配置有問題,因爲它需要一年前因安全漏洞而更改的SSLRenegotiation。因此,執行SSLRenogitiation的新方法僅由較新的客戶端支持,並且有時即使支持它也不會因爲錯誤而起作用。

我對輕鬆解決方法的建議:將Jetty配置爲偵聽兩個SSL端口: 例如,在沒有HTTPS客戶端驗證的443上和需要使用HTTPS客戶端驗證的8443上。然後讓受保護的servlet僅在8443上可用。這不是一個很好的解決方案,但是100%可靠,適用於Jetty和所有客戶端。

+1

在我的環境中,所有客戶端和服務器都必須更新(在發生問題時,這是一個有趣的幾周)。此外,使用非標準端口將不允許通過各種防火牆。 – user63599 2011-01-15 00:59:08