Ssl

如何禁用縮寫 SSL 握手以在每次呼叫 lighttpd 時執行完整握手?

  • April 17, 2017

我了解 ssl 握手流程,但我遇到了邏輯問題。當使用者選擇一個證書時,我需要根據應用程序對其進行驗證,以了解它的可靠性並與任何系統使用者匹配。但如果沒有,我必須允許使用者再次詢問以選擇另一個。也許使用者在他們的機器上安裝了多個證書並且錯誤地選擇了錯誤的證書。

在我的實際場景中,要選擇另一個證書,使用者必須關閉瀏覽器並再次打開,但這會給使用者帶來負面的體驗,我想改進它。

該解決方案對每個請求進行握手,因此它允許使用者選擇另一個請求。

但是怎麼做呢?

我發現的最相關的問題是https://security.stackexchange.com/questions/56623/avoiding-ssl-handshake-for-each-call

  • 完全握手是客戶端和伺服器在彼此不認識時所做的事情(他們以前沒有交談過,或者那是很久以前的事了)。在完整的握手中,證書被發送,並且非對稱加密(RSA、Diffie-Hellman…)發生。
  • 縮寫握手是客戶端和伺服器相互記住的內容;更準確地說,他們記得他們在之前的完整握手中建立的算法和密鑰,並同意重用它們(從技術上講,他們重用“主密鑰”並從中派生新的加密密鑰用於此連接)。

我可以釋放任何 cookie、關閉選項卡並禁用保持活動狀態,第二次握手不會打開證書提示。它使用的是以前選擇的,例如對於 chrome,沒有選項“記住我的決定”,Firefox 有。Edge、Opera、Edge 等也是如此。它是標準嗎?

我想,它可以由伺服器端控制,請求新的 SSL 握手。我進行了一些干預以嘗試自己解決,但沒有成功

  • 在客戶端

    • 清除所有數據,甚至歷史記錄。
    • 在另一個子域中打開 cookieless
  • 在伺服器端

    • 發送“連接:關閉”標頭
    • 禁用保活

關閉瀏覽器對於新的 SSL 握手是唯一有效的,但它會促進糟糕的使用者體驗。

好吧,如果我正在清除瀏覽器中的所有數據,關閉連接,刪除任何活動的數據,並且它仍在使用第二個請求中選擇的第一個證書,直到我關閉瀏覽器(殺死所有程序),那麼有問題,或者使用瀏覽器(全部)或使用伺服器。

如果我的應用程序使用 SSL 對使用者進行身份驗證,我不能在不關閉瀏覽器的情況下使用多個登錄,這是不對的,它應該有辦法重新協商此身份驗證。

這遵循 HTTP Basic Auth 的相同行為,這樣瀏覽器會在瀏覽器會話期間記住這些憑據,並且不提供忘記它的方法。

引用自:https://serverfault.com/questions/844204