SSL延遲有多大?

jopen 10年前發布 | 11K 次閱讀 SSL 網絡技術

        據說,Netscape 公司當年設計 SSL 協議的時候,有人提過,將互聯網所有鏈接都變成 HTTPs 開頭的加密鏈接。

        這個建議沒有得到采納,原因之一是 HTTPs 鏈接比不加密的 HTTP 鏈接慢很多。(另一個原因好像是,HTTPs 鏈接默認不能緩存。)

        自從我知道這個掌故以后,腦袋中就有一個觀念:HTTPs 鏈接很慢。但是,它到底有多慢,我并沒有一個精確的概念。直到今天我從一篇文章中,學到了測量 HTTPs 鏈接耗時的方法。

SSL延遲有多大?

        首先我解釋一下,為什么 HTTPs 鏈接比較慢。

        HTTPs 鏈接和 HTTP 鏈接都建立在 TCP 協議之上。HTTP 鏈接比較單純,使用三個握手數據包建立連接之后,就可以發送內容數據了。

SSL延遲有多大?

        上圖中,客戶端首先發送 SYN 數據包,然后服務器發送 SYN+ACK 數據包,最后客戶端發送 ACK 數據包,接下來就可以發送內容了。這三個數據包的發送過程,叫做 TCP 握手。

        再來看 HTTPs 鏈接,它也采用 TCP 協議發送數據,所以它也需要上面的這三步握手過程。而且,在這三步結束以后,它還有一個 SSL 握手

        總結一下,就是下面這兩個式子。

HTTP 耗時 = TCP 握手

HTTPs 耗時 = TCP 握手 + SSL 握手

        所以,HTTPs 肯定比 HTTP 耗時,這就叫 SSL 延遲。

        命令行工具 curl 有一個w參數,可以用來測量 TCP 握手和 SSL 握手的具體耗時,以訪問支付寶為例。

     $ curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n" -so /dev/null https://www.alipay.comTCP handshake: 0.022, SSL handshake: 0.064

        上面命令中的w參數表示指定輸出格式,timeconnect 變量表示 TCP 握手的耗時,timeappconnect 變量表示 SSL 握手的耗時(更多變量請查看文檔實例),s參數和o參數用來關閉標準輸出。

        從運行結果可以看到,SSL 握手的耗時(64 毫秒)大概是 TCP 握手(22 毫秒)的三倍。也就是說,在建立連接的階段,HTTPs 鏈接比 HTTP 鏈接要長 3 倍的時間,具體數字取決于 CPU 的快慢。

        所以,如果是對安全性要求不高的場合,為了提高網頁性能,建議不要采用保密強度很高的數字證書。一般場合下,1024 位的證書已經足夠了,2048 位和 4096 位的證書將進一步延長 SSL 握手的耗時。

        (完)

                    <span id="shareA4" class="fl">                            
                        </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!