HTTP = HTTP + SSL(安全套接层) / TLS(传输层安全性协议)
区别:
- HTTP是明文传输的,不安全;HTTPS是加密传输,更安全。
- HTTP是使用的是80端口;HTTPS是443端口。
- HTTP是传输比较快;HTTPS较慢。
- HTTPS的证书一般需要购买(但也有免费);HTTP不需要证书。
开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手
需要7次握手,3次TCP + 4次TLS。
HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
-
TCP 三次同步握手
-
客户端验证服务器数字证书
-
DH 算法协商对称加密算法的密钥、hash 算法的密钥
-
SSL 安全加密隧道协商完成
-
网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
SSL协议的握手过程
-
客户端向服务端发送
Client Hello消息,其中携带客户端支持的协议版本、加密算法、压缩算法以及客户端生成的随机数; -
服务端收到客户端支持的协议版本、加密算法等信息后;
- 向客户端发送
Server Hello消息,并携带选择特定的协议版本、加密方法、会话 ID 以及服务端生成的随机数; - 向客户端发送
Certificate消息,即服务端的证书链,其中包含证书支持的域名、发行方和有效期等信息; - 向客户端发送
Server Key Exchange消息,传递公钥以及签名等信息; - 向客户端发送可选的消息
Certificate Request,验证客户端的证书; - 向客户端发送
Server Hello Done消息,通知服务端已经发送了全部的相关信息;
- 向客户端发送
-
客户端收到服务端的协议版本、加密方法、会话 ID 以及证书等信息后,验证服务端的证书;
- 向服务端发送
Client Key Exchange消息,包含使用服务端公钥加密后的随机字符串,即预主密钥(Pre Master Secret); - 向服务端发送
Change Cipher Spec消息,通知服务端后面的数据段会加密传输; - 向服务端发送
Finished消息,其中包含加密后的握手信息;
- 向服务端发送
-
服务端收到
Change Cipher Spec和Finished消息后;- 向客户端发送
Change Cipher Spec消息,通知客户端后面的数据段会加密传输; - 向客户端发送
Finished消息,验证客户端的Finished消息并完成 TLS 握手;
- 向客户端发送
TLS 握手的关键在于利用通信双发生成的随机字符串和服务端的证书公钥生成一个双方经过协商后的对称密钥,这样通信双方就可以使用这个对称密钥在后续的数据传输中加密消息数据,防止中间人的监听和攻击,保证通讯安全。