HTTPS 双向认证
作者 :上海派拉软件基础研发部-左健
一、HTTPS 基础
1. 什么是 HTTP 和 HTTPS
HTTP:超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:超文本传输安全协议(HyperText Transfer Protocol Secure)是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL/TLS 层,HTTPS 的安全基础是 SSL/TLS,因此加密的详细内容就需要 SSL/TLS。HTTPS 协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
2. SSL 和 TLS 区别是什么
SSL:安全套接字层(Secure Socket Layer)位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL 通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL 记录协议和 SSL 握手协议。
TLS:传输层安全协议(Transport Layer Security)用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS 记录协议和 TLS 握手协议。
总结:SSL 有 1,2,3 三个版本,但现在只使用版本 3,TLS 是 SSL 的标准化后的产物,有 TLS1.0 、TLS1.1、TLS1.2 三个版本,TLS1.0 和 SSL3.0 几乎没有区别,事实上我们现在用的都是 TLS,但因为历史上习惯了 SSL 这个称呼,平常还是以叫 SSL 为多。
3. 什么是 CRL
CRL:证书吊销列表 (Certificate Revocation List) ,客户端通过定期的去 CA 那里请求一个被吊销的证书列表,作为本地缓存,从而之后对服务器证书的验证就可以依赖这个缓存。但是这个方案需要客户端去管理一个本地缓存,这相当于把所有的责任都扔给了客户端。客户端访问 CA 的服务器的带宽和稳定性都存在疑问,所以这种方案是注定要输给服务端的解决方案的。
4. 什么是 OCSP
OCSP:在线证书状态协议(Online Certificate Status Protocol),在 TLS 的使用中,客户端无法判断一个还没有过期的证书是否被吊销了。因为 CA 在颁发了证书之后大部分情况下都是等待这个证书过期了之后的自然失效,而如果 CA 出于某些原因要人为的吊销某个证书就没有了办法。这个时候客户端在从服务端拿到了一个证书之后,去找 OCSP 服务端的接口去验证一下这个证书的是否过期这一信息。
5. 什么是 HSTS
HSTS:http 严格传输安全(HTTP Strict-Transport-Security),HSTS 是国际互联网工程组织 IETF 正在推行一种新的 Web 安全协议,网站采用 HSTS 后,用户访问时无需手动在地址栏中输入 HTTPS,浏览器会自动采用 HTTPS 访问网站地址,从而保证用户始终访问到网站的加密链接,保护数据传输安全。在服务端设置 HSTS 后,不安全的请求将无法访问
二、HTTPS 流程图
三、HTTPS 报文名词答疑
1. Session Identifier
Session Identifier(会话标识符),是 TLS 握手中生成的 Session ID。服务端可以将 Session ID 协商后的信息存起来,浏览器也可以保存 Session ID,并在后续的 ClientHello 握手中带上它,如果服务端能找到与之匹配的信息,就可以完成一次快速握手。
2. Session Ticket
Session Identifier 机制有一些弊端,例如:1)负载均衡中,多机之间往往没有同步 Session 信息,如果客户端两次请求没有落在同一台机器上就无法找到匹配的信息;2)服务端存储 Session ID 对应的信息不好控制失效时间,太短起不到作用,太长又占用服务端大量资源。
而 Session Ticket(会话记录单)可以解决这些问题,Session Ticket 是用只有服务端知道的安全密钥加密过的会话信息,最终保存在浏览器端。浏览器如果在 ClientHello 时带上了 Session Ticket,只要服务器能成功解密就可以完成快速握手。
3. Client Key Exchange 和 Server Key Exchange
协议里常用的 cipher suite 除了 RSA, DH_DSS,DH_RSA 之外,随机数 C(pre-master key)是双方各自计算而不放在信道上传递的。例如,如果用的是 TLS_DHE_XXX 等等,随机数 C(pre-master key)是各自从 server key Exchange, client key exchange 里计算的(dh 协商,双方各自贡献一部分公共信息,但随机数 C(pre-master key)只在本地产生,TCP 通信包里没有)
四、HTTPS 抓包报文分析细节
1. client hello
①、发送客户端支持的 tls 版本
②、发送客户端支持的对称加密列表
③、随机数 A
2. server hello
①、服务端选择的 tls 版本
②、服务端选择的对称加密算法
③、服务端证书
④、随机数 B
⑤、Server Key Exchange
⑥、要求客户端返回客户端证书(https 双向认证独有)
3. 客户端发送证书等信息
①、客户端证书(https 双向认证独有)
②、Client Key Exchange
③、客户端私钥签名的握手数据(https 双向认证独有)
④、对称加密通知
⑤、使用随机数 A、随机数 B、随机数 C(pre master key)计算出的对称加密密钥加密的握手数据
4. 服务端完成握手
①、New Session Ticket
②、对称加密通知
③、使用随机数 A、随机数 B、随机数 C(pre master key)计算出的对称加密密钥加密的握手数据
评论