2011-12-14 22 views
2

我有一個Servlet容器(Glassfish/OC4J),它爲一些可以使用HTTPS訪問的JAX-WS Web服務端點提供服務。 SSL配置爲支持客戶端身份驗證和僅服務器身份驗證(如Glassfish上的client-auth =「want」)。HttpServlet - 如何知道是否使用SSL客戶端身份驗證

在我的端點實現中,我想知道是否使用客戶端身份驗證完成連接。我已經有權訪問HttpServletRequest對象,但getAuthType()方法總是返回null,如果Client驗證完成或沒有完成(使用wireshark進行檢查以確保它符合我的需要)。

有誰知道如何獲得這些信息?

非常感謝

+0

哪個容器 - Glassfish? – home 2011-12-14 13:23:35

+0

是Glassfish在這種情況下使用,但我也使用其他容器,如OC4J,我很高興有一個解決方案,適用於兩者。 – gastush 2011-12-14 13:31:36

回答

5

javax.servlet.request.X509Certificate的請求屬性應返回的java.security.cert.X509Certificate陣列。

你可以從你的要求用得到它:

X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate"); 

如果非空,如果它包含的東西,第一個元素(certs[0])將客戶端證書本身。此陣列中可能還有其他元素,其中包含中間CA證書(客戶端呈現的內容可以是證書鏈),其中cert[i]cert[i+1]發佈。

相關問題