基础知识
HTTPS
也称作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。本文着重描述TLS协议的1.2版本 下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系
共享密钥也叫对称密钥:
服务器和客户端加解密共用同一个密钥 。
公开密钥也叫非对称密钥:
有两个密钥,一个私有密钥,一个公开密钥:公开密钥是公开的,一般用来加密数据,但只能用私有密钥进行解密。
公开密钥加密与共享密钥相比,处理速度慢,所以充分利用两者的优势,将多重方法组合起来用于通信。
* 在交换密钥环节使用公开密钥加密方式.
* 之后的建立通信交换报文阶段则使用共享密钥加密方式。
HTTPS和HTTP协议相比提供了
数据完整性:内容传输经过完整性校验
数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
身份认证:第三方无法伪造服务端(客户端)身份
其中,数据完整性和隐私性由TLS Record Protocol保证,身份认证由TLS Handshaking Protocols实现。
使用RSA算法的SSL握手过程
1.[明文] 客户端发送随机数client_random和支持的加密方式列表
2.[明文] 服务器返回随机数server_random,选择的加密方式和服务器证书链
3.[RSA] 客户端验证服务器证书,使用证书中的公钥加密premaster secret发送给服务端
5.服务端使用私钥解密premaster secret
6.两端分别通过client_random,server_random和premaster secret生成master secret,用于对称加密后续通信内容
证书(Digital certificate)
证书中包含什么信息
证书信息:过期时间和序列号
所有者信息:姓名等
所有者公钥
为什么服务端要发送证书给客户端
互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。
客户端为什么要验证接收到的证书
中间人攻击
客户端<—–伪造证书 ——-攻击者<—–拦截请求——-服务端