性能損耗
- 選擇橢圓曲線,并生成橢圓曲線的計算耗時
- CA證書驗證的耗時
- 計算pre-master的耗時
硬件優化
HTTPS是計算密集型任務,不是IO密集型任務
所以硬件最好買更高級的CPU,而不是網卡,磁盤
協議優化
- ECDHE代替RSA,因為ECDHE可以在 TLS 協議的第 3 次握手后,第 4 次握手前,發送加密的應用數據
- 強制選擇性能高的橢圓曲線
- 安全性要求不高時,強制選擇性能高的對稱加密算法
- TLS1.2升級成TLS1.3,TLS 1.3第一次握手把 Hello 和公鑰交換這兩個消息合并成了一個消息,于是這樣就減少到只需 1 RTT 就能完成 TLS 握手
證書優化
- 證書傳輸優化:減少證書大小,降低網絡IO負擔。對于服務器的證書應該選擇橢圓曲線(ECDSA)證書,而不是 RSA 證書,因為在相同安全強度下,ECC 密鑰長度比 RSA 短的多
- 證書驗證優化:證書驗證需要訪問CA然后下載官方數據
從 使用證書吊銷列表CRL,下載一大個列表再判斷證書有效性
到
OCSP在線證書協議實時查詢每一張證書的有效性 - CA驗證網絡開銷優化:服務器向 CA 周期性地查詢證書狀態,獲得一個帶有時間戳和簽名的響應結果并緩存它
會話復用
TLS握手的目的就是為了算出最終的會話密鑰,那把會話密鑰緩存起來就好了
Session ID:
SessionID為key,會話密鑰為Value緩存到服務器里面
缺點:
- 客戶端增多,服務器內存壓力增大
- 現在是多節點負載均衡的,服務器緩存可用性不高
Session Ticket:
客戶端緩存【加密的會話密鑰Ticket】,客戶端再次連接服務器時,客戶端會發送 Ticket
服務器解密后就可以獲取上一次的會話密鑰,然后驗證有效期,如果沒問題,就可以恢復會話了
對于集群服務器的話,要確保每臺服務器加密「會話密鑰」的密鑰是一致的,這樣客戶端攜帶 Ticket 訪問任意一臺服務器時,都能恢復會話
Session ID 和 Session Ticket 都不具備前向安全性,所以會話復用要有一定的時間限制
因為一旦加密「會話密鑰」的密鑰被破解或者服務器泄漏「會話密鑰」,前面劫持的通信密文都會被破解
什么是重放攻擊
重放攻擊的危險之處在于,如果中間人截獲了某個客戶端的 Session ID 或 Session Ticket 以及 POST 報文
而一般 POST 請求會改變數據庫的數據
中間人就可以利用此截獲的報文,不斷向服務器發送該報文,這樣就會導致數據庫的數據被中間人改變了,而客戶是不知情的
避免重放攻擊的方式就是需要對會話密鑰設定一個合理的過期時間