簡體   English   中英

有沒有辦法在Servlet中動態觸發SSL / TLS重新協商?

[英]Is there a way to dynamically trigger SSL/TLS renegotiation in a servlet?

我希望能夠將Web瀏覽器客戶端和(自動)服務客戶端都接受到在我的應用程序中運行的單個servlet。 一些服務客戶端將使用TLS客戶端證書進行身份驗證,但有些則不會。 我不希望Web瀏覽器客戶端被提示輸入證書,即使用戶已在瀏覽器中安裝了某些證書也是如此。 是否提示客戶端證書的決定是動態的,並且取決於客戶端的策略,因此不能在web.xml中進行靜態配置。

有沒有一種方法可以動態觸發TLS重新協商以從Servlet內部請求客戶端證書? 如果我可以訪問原始SSLSocket,則可以將其配置為需要客戶端證書,然后調用startHandshake()強制重新協商。 據我所知,沒有一種可移植的方式來獲取與Servlet請求/響應關聯的SSLSocket。

我的應用程序必須在各種servlet容器中運行,因此,我盡可能避免使用特定於容器的解決方案。 理想情況下,該解決方案將不涉及重定向,但是如果這是唯一的方法,我將接受它。

您在上面的評論中寫道:

因為該設置將導致Web瀏覽器提示用戶選擇證書(如果已安裝的證書與配置的CA之一匹配)。 我從不希望Web瀏覽器客戶端發生這種情況

然后,我投票贊成從服務器端實現這是不可能的。 TLS首先通過安全通道發送任何數據。 您無法確定是Web瀏覽器還是不敲門詢問客戶身份。 從TLS的角度來看,這只是另一個未命名的網絡客戶端嘗試進行的連接。 建立安全連接后,將發送數據,您可以確定是否為瀏覽器。

您可能希望通過不同的端點通過管道傳輸瀏覽器(1路ssl)和服務器客戶端(2路ssl)。

否則,您可能想要實現自己的TLS協議握手過程。

您可能希望配置瀏覽器不回答客戶端證書請求,而不是配置服務器不詢問(如果可能)確定這是基於瀏覽器的客戶端。 可以嘗試通過密碼套件(受支持的加密模式列表)猜測它,但這絕對不是servlet交互級別。

我很好奇有人知道何為您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM