HTTPS⼯作原理及报⽂讲解
1 HTTPS
1.1 HTTPS简介
HTTPS (Secure Hypertext Transfer Protocol)安全超⽂本传输协议,是⼀个安全通信通道,它基于HTTP开发⽤于在客户计算机和服务器之间交换信息。它使⽤安全套接字层(SSL)进⾏信息交换,简单来说它是HTTP的安全版,是使⽤TLS/SSL加密的HTTP协议。
SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,⽤于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性和⾝份认证。1994年改版为SSLv2,1995年改版为SSLv3。
TLS(Transport Layer Security)安全传输层协议。⽤于在两个通信应⽤程序之间提供保密性和数据完整性。该标准协议是由IETF于1999年颁布,整体来说TLS⾮常类似SSLv3,只是对SSLv3做了些增加和修改。
TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的⼀层安全协议,不影响原有的TCP协议和HTTP协议,所以使⽤HTTPS基本上不需要对HTTP页⾯进⾏太多的改造。
1.2 HTTP和HTTPS区别
1、https协议需要到CA申请证书,⼀般免费证书较少,因⽽需要⼀定费⽤。
2、http是超⽂本传输协议,采⽤明⽂传输信息,存在信息窃听、信息篡改和信息劫持的风险。https则是具有安全性的ssl/tls加密传输协议。⽽协议TLS/SSL具有⾝份验证、信息加密和完整性校验的功能,可以避免此类问题发⽣。
3、http和https使⽤的是完全不同的连接⽅式,⽤的端⼝也不⼀样,前者是80,后者是443;使⽤的URL也不⼀样,前者为http//:URL,后者为https//:URL。
4、http的连接很简单,是⽆状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进⾏加密传输、⾝份认证的⽹络协议,⽐http协议安全。
1.3 TLS/SSL协议⼯作原理
1.3.1 TLS/SSL协议结构
SSL是⼀个不依赖于平台和运⽤程序的协议,位于TCP/IP协议与各种应⽤层协议之间,为数据通信提⾼安全⽀持。SSL协议结构如下图:
图:SSL协议结构图
SSL的体系结构中包含两个协议⼦层,其中底层是SSL记录协议层(SSL Record Protocol Layer);⾼层是SSL握⼿协议层(SSL HandShake Protocol Layer)。
SSL协议主要分为两层:
SSL记录协议层的作⽤是为⾼层协议提供基本的安全服务。SSL纪录协议针对HTTP协议进⾏了特别的设计,使得超⽂本的传输协议HTTP 能够在SSL运⾏。纪录封装各种⾼层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。
SSL握⼿协议层包括SSL握⼿协议(SSL HandShake Protocol)、SSL密码参数修改协议(SSL Change Cipher Spec Protocol)和SSL告警协议(SSL Alert Protocol)。握⼿层的这些协议⽤于SSL管理信息的交换,允许应⽤协议传送数据之间相互验证,协商加密算法和⽣成密钥等。
SSL握⼿协议的作⽤是协调客户和服务器的状态,使双⽅能够达到状态的同步。
其中最重要的是记录协议和握⼿协议:
SSL记录协议:它建⽴在可靠的传输(如TCP)之上,为⾼层协议提供数据封装、压缩、加密等基本功能。
SSL握⼿协议:它建⽴在SSL记录协议之上,⽤于在实际的数据传输开始之前,通讯双⽅进⾏⾝份认证、协商加密算法、交换加密密钥等。注:本⽂主要介绍SSL握⼿协议,省略SSL记录协议
1.3.2 SSL/TLS握⼿协议建⽴连接过程
SSL 握⼿协议是SSL 协议中最重要同时也是最复杂的协议。
SSL 握⼿协议主要负责如下⼯作:
1、算法协商
2、⾝份验证
3、确定密钥
SSL握⼿过程分为四种:
1、Full Handshake : 全流程握⼿,C/S双⽅从⽆到有建⽴SSL连接;
2、Resum session Handshake : C/S双⽅曾经建⽴过连接,但中途断了,SSL会话信息还有保留,只需要执⾏部分握⼿流程就可建⽴SSL连接;
3、Server Re-negotiation Handshake : 已经建⽴了SSL连接,但server端为了某些原因(⽐如安全性)要求重新对密钥进⾏协商,也只需要执⾏部分握⼿流程;
4、Client Re-negotiation Handshake : 已经建⽴SSL连接,但client端为了某些原因要求重新协商,只需执⾏部分握⼿流程。
下⽂将介绍全流程握⼿的流程:
图:SSL/TLS握⼿协议建⽴连接过程图
1、client_hello
客户端发起请求,以明⽂传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下:
· ⽀持的最⾼TSL协议版本version,从低到⾼依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,当前基本不再使⽤低于 TLSv1 的版本;
· 客户端⽀持的加密套件 cipher suites 列表, 每个加密套件对应前⾯ TLS 原理中的四个功能的组合:认证算法 Au (⾝份验证)、密钥交换算法 KeyExchange(密钥协商)、对称加密算法 Enc (信息加密)和信息摘要 Mac(完整性校验);
· ⽀持的压缩算法 compression methods 列表,⽤于后续的信息压缩传输;
· 随机数 random_C,⽤于后续的密钥的⽣成;
· 扩展字段 extensions,⽀持协议与算法的相关参数以及其它辅助信息等,常见的 SNI 就属于扩展字段,后续单独讨论该字段作⽤。
2、server_hello+server_certificate+sever_hello_done
· server_hello, 服务端返回协商的信息结果,包括选择使⽤的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法compression method、随机数 random_S 等,其中随机数⽤于后续的密钥协商;
· server_certificates, 服务器端配置对应的证书链,⽤于⾝份验证与密钥交换;
· server_hello_done,通知客户端 server_hello 信息发送结束;
3、证书校验
客户端验证证书的合法性,如果验证通过才会进⾏后续通信,否则根据错误情况不同做出提⽰和操作,合法性验证包括如下:
· [证书链]的可信性 trusted certificate path,⽅法如前⽂所述;
· 证书是否吊销 revocation,有两类⽅式离线 CRL 与在线 OCSP,不同的客户端⾏为会不同;
· 有效期 expiry date,证书是否在有效时间范围;
· 域名 domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析;
4、client_key_exchange+change_cipher_spec+encrypted_handshake_message
1. client_key_exchange,合法性验证通过之后,客户端计算产⽣随机数字 Pre-master,并⽤证书公钥加密,发送给服务器;
(b) 此时客户端已经获取全部的计算协商密钥需要的信息:两个明⽂随机数 random_C 和 random_S 与⾃⼰计算产⽣的 Pre-master,计算得到协商密钥;
enc_key=Fuc(random_C, random_S, Pre-Master)
(c) change_cipher_spec,客户端通知服务器后续的通信都采⽤协商的通信密钥和加密算法进⾏加密通信;
(d) encrypted_handshake_message,结合之前所有通信参数的 hash 值与其它相关信息⽣成⼀段数据,采⽤协商密钥 session secret 与算法进⾏加密,然后发送给服务器⽤于数据与握⼿验证;
5、change_cipher_spec+encrypted_handshake_message
(a) 服务器⽤私钥解密加密的 Pre-master 数据,基于之前交换的两个明⽂随机数 random_C 和 random_S,计算得到协商密
钥:enc_key=Fuc(random_C, random_S, Pre-Master);
(b) 计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性;
(c) change_cipher_spec, 验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采⽤协商的密钥与算法进⾏加密通信;
(d) encrypted_handshake_message, 服务器也结合所有当前的通信参数信息⽣成⼀段数据并采⽤协商密钥 session secret 与算法加密并发送到客户端;
6、握⼿结束
客户端计算所有接收信息的 hash 值,并采⽤协商密钥解密 encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握⼿完成;
7、加密通信
开始使⽤协商密钥与算法进⾏加密通信。
注意:
(a) 服务器也可以要求验证客户端,即双向认证,可以在过程2要发送 client_certificate_request 信息,客户端在过程4中先发送
ssl协议全称
client_certificate与certificate_verify_message 信息,证书的验证⽅式基本相同,certificate_verify_message 是采⽤client的私钥加密的⼀段基于已经协商的通信信息得到数据,服务器可以采⽤对应的公钥解密并验证;
(b) 根据使⽤的密钥交换算法的不同,如 ECC 等,协商细节略有不同,总体相似;
(c) sever key exchange 的作⽤是 server certificate 没有携带⾜够的信息时,发送给客户端以计算 pre-master,如基于 DH 的证书,公钥不被证书中包含,需要单独发送;
(d) change cipher spec 实际可⽤于通知对端改版当前使⽤的加密通信⽅式,当前没有深⼊解析;
(e) alter message ⽤于指明在握⼿或通信过程中的状态改变或错误信息,⼀般告警信息触发条件是连接关闭,收到不合法的信息,信息解密失败,⽤户取消操作等,收到告警信息之后,通信会被断开或者由接收⽅决定是否断开连接。
1.2.3 SSL/TLS报⽂分析
图:SSL建⽴总过程
在⽤SSL进⾏通信之前,⾸先要使⽤SSL的Handshake协议在通信两端握⼿,协商数据传输中要⽤到的相关安全参数(如加密算法、共享密钥、产⽣密钥所要的材料等),并对对端的⾝份进⾏验证。
SSL的建⽴过程总共有13个包,第⼀次建⽴⾄少需要9个包。
图:TLS握⼿协议过程报⽂
SSL建⽴第⼀阶段:Client Hello,Server Hello
客户端⾸先发送Client Hello消息到服务端,服务端收到ClientHello消息后,再发送ServerHello消息回应客户端。
图:SSL建⽴第⼀阶段报⽂交换⽰意图
Client Hello
握⼿第⼀步是客户端向服务端发送 Client Hello 消息,这个消息⾥包含了⼀个客户端⽣成的随机数Rand
om1、客户端⽀持的加密套件(Support Ciphers)和 SSL Version 等信息。通过 Wireshark 抓包,我们可以看到如下信息:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。