-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Web业务层相关的,普通人在网上的一切行为活动,都可以归结为:向服务器发送信息或者接受来自服务器的信息。
本文主要收集HTTP与HTTPS的信息
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL(Secure Sockets Layer)/TLS(Transport Layer Security)协议是为了解决这三大风险而设计的,希望达到:
(1) 所有信息都是加密传播,第三方无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。
过程:
-
客户端先向浏览器发出加密通信的请求( ClientHello )。在这一布,客户端主要向服务器提供以下信息。
- 支持的协议版本。(比如TLS1.0版本)
- 客户端生成的随机数,用于生成“对话密钥”
- 支持的加密方法
- 支持的压缩方法
-
服务器回应 ( ServerHello )
- 确认使用的加密通信协议版本,比如 TLS1.0 版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
- 一个服务器生成的随机数,用于生成对话密钥
- 确认使用的加密方法,比如RSA公钥加密
- 服务器证书
-
客户端回应
- 客户端收到服务器回应后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信
- 向服务器发送以下三项消息
- 一个随机数。该随机数用服务器公钥加密,防止被窃听
- 编码改变同之,表示随后的信息都将用双方商定的加密方法发送
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
-
服务器最后回应
- 服务器接受到客户端的第三个随机数pre-master key 之后,计算生成本次会话的“会话密钥”。然后,向客户端最后发送下面的信息
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
- 服务器握手结束通知,表示服务器的握手阶段已经结束了。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
-
整个握手阶段结束,接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议。不过会使用这次生成的“会话密钥” 加密内容。整个过程详见下图
参考
图解SSL/TLS协议
HTTPS explained with carrier pigeons
HTTPS的故事
FAQ
- 为什么需要三个随机数
首先,这三个随机数是用于生成对话密钥(对称密钥),问题在于SSL协议不信任每个主机都能产生完全随机的随机数。 - HSTS
- DH算法