HTTP 和 HTTPS 的区别

安全性:

HTTP:数据像在广场上喊话,明文传输,黑客轻松窃听(账号密码、聊天记录裸奔)。
HTTPS:数据装进保险箱,加密传输,黑客截获也看不懂(变成乱码)。

连接方式:

HTTP:端口80直接开门见山,客户端喊一句,服务器回一句,完事儿。
HTTPS:端口443先握手确认身份(SSL/TLS协议),确认对方是可靠的再传数据。

证书验证:

HTTP:不检查身份,可能连到假服务器(比如钓鱼网站)。
HTTPS:服务器必须带“身份证”(CA机构颁发的证书),浏览器验证通过才显示小锁图标。

成本:

HTTP:便宜不用买证书,服务器配置简单。
HTTPS:略贵需购买证书(免费也有,比如Let’s Encrypt),还要定期维护加密配置。

一句话总结:HTTPS = HTTP + 加密 + 身份验证 + 数据防篡改,安全加满,但稍微费钱费事。现在大部分网站都用HTTPS啦,看到“锁”才放心输密码!

浏览器访问 HTTPS 网站流程

步骤 操作
1 用户在浏览器地址栏输入 HTTPS 网站 URL 并回车
2 浏览器向 DNS 服务器发送查询网站 IP 地址的请求
3 DNS 服务器返回网站的 IP 地址
4 浏览器向服务器发送 SYN 包,发起 TCP 连接请求
5 服务器返回 SYN+ACK 包,确认连接请求
6 浏览器发送 ACK 包,完成 TCP 三次握手,建立 TCP 连接
7 浏览器发送 “Client Hello” 消息,包含支持的 SSL/TLS 版本、加密算法列表等
8 服务器发送 “Server Hello” 消息,选定 SSL/TLS 版本和加密算法,发送服务器数字证书
9 客户端验证服务器数字证书的有效性
10 客户端生成随机会话密钥,用服务器公钥加密后发送给服务器
11 服务器用私钥解密获取会话密钥
12 双方发送 “Change Cipher Spec” 消息,通知后续通信加密
13 双方发送 “Finished” 消息,完成 SSL/TLS 握手
14 浏览器发送 HTTP 请求(如 GET 或 POST)
15 服务器用会话密钥加密响应数据并发送给浏览器
16 浏览器用会话密钥解密响应数据,获取网页内容
17 浏览器和服务器发送 “FIN” 消息,关闭 TCP 连接

https-1.jpg

注:TLS 修改密文协议(Change Cipher Spec Protocol) 就是加密传输中每隔一段时间必须改变其加解密参数的协议,修改密文协议的设计目的是为了保障SSL传输过程的安全性,因为SSL协议要求客户端或服务器端每隔一段时间必须改变其加解密参数。当某一方要改变其加解密参数时,就发送一个简单的消息通知对方下一个要传送的数据将采用新的加解密参数,也就是要求对方改变原来的安全参数。

HTTPS双向认证

一般访问网站的情景,客户端只是通过https协议确认服务器的身份是否可信,在某些强安全要求的场景下,要求启用HTTPS双向认证。如果用了双向认证方式,不仅客户端会验证服务端的身份,而且服务端也会验证客户端的身份。服务端一旦验证到请求自己的客户端为不可信任的,服务端就拒绝继续通信,客户端如果发现服务端为不可信任的,那么也中止通信。

https-2.jpg

转自https://mp.weixin.qq.com/s/QhgMqM4_2fRnVNLVuwdNXw