1. 基本概念
ssl 协议由网景公司(Netscape)设计,由此网络链接从 http 逐步走向更为安全的 https 加密链接模式。
HTTPs 链接和 HTTP 链接都建立在 TCP 协议之上,而三次握手是 TCP 协议实现的重要环节。
三次握手(handshake)
- 客户端首先发送 SYN 数据包,
- 然后服务器发送SYN+ACK数据包,
- 最后客户端发送ACK数据包,
接下来就可以发送内容(data)了。这三个数据包的发送过程,叫做 TCP 握手。
2. HTTP vs HTTPs
HTTPs 链接和 HTTP 链接都建立在 TCP 协议之上。HTTP 链接比较简单,使用三个握手数据包建立连接之后,就可以发送内容数据了。而 HTTPs 链接,它也采用 TCP 协议发送数据,所以它也需要上面的这三步握手过程。而且,在这三步结束以后,它还有一个 SSL 协议。
- HTTP耗时 = TCP握手
- HTTPs耗时 = TCP握手 + SSL握手
也即,为实现 ssl 协议所需的 ssl 握手是 https 相较 http 连接更为耗时的原因所在。
3. curl 验证
使用 linux 下的命令行工具 curl 进行验证:
$ curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}
" -so /dev/null https://www.alipay.com
TCP handshake: 0.293, SSL handshake: 0.494
-so
:s:silent,关闭标准输出time_connect
/time_appconnect
:分别表示 TCP 握手的耗时,SSL 握手的耗时;