HTTPS协议运行机制说明



HTTPS协议运行机制说明
 


1      hello https


“HTTPS时代要到来了”, 这是最近互联网上最风靡的了. 确实如此, 随着互联网巨头(百度,苹果)不断向HTTPS阵营转移, HTTPS在web应用中, 越来越重要. 本文就是是为大家了解HTTPS是怎么一回事而行文的.


web互联网上需要安全通讯, 就需要使用https协议.


https协议, 可以理解为http的安全版, 是构建与SSL/TLS之上的Http. 全称为: Hyper Text Transfer Protocol over Secure Socket Layer. 通过使用加密传播, 摘要校验以及身份证书来解决http明文传输时带来的被窃听(eavesdropping), 被篡改(tampering)以及被冒充(pretending)的典型三大风险的.


SSL/TLS, 就是安全传输的基础.
•SSL: Secure Socket Layer. 安全套接层
•TLS: Transport Layer Security. 安全传输层协议


TLS是SSL的升级版. 目前市场上广泛使用的为SSL3.0版本和TLS1.0版本.


下面就看看SSL/TLS是怎么一回事.


 


2      SSL/TLS思路


基本过程
•首先握手(handshake)通过客户端于服务器端协商, 获取会话密钥.
•其次客户端于服务器端的通讯采用会话密钥进行加密传输.


会话密钥: session key, 就是传输数据时所使用的对称加密算法的密钥. 该会话密钥在客户端与服务器端每次会话中仅仅需要生成一次.


握手阶段, 是为了获取会话密钥. 但是会话密钥, 在生成和传输时, 使用了公钥私钥非对称加密算法, 进行加密传输. 而为了使客户端相信服务器提供的公钥, 需要将公钥放在第三方证书中(CA).


这样设计的目的是:


1, 公钥私钥非对称加密算法, 每次计算的时间过长, 如果全部传输数据都采用该公私钥算法, 时间成本过大. 而利用公钥仅仅加密会话密钥, 再使用会话密钥加密传输数据, 这样效率和安全性都可以兼顾. 就是SSL/TLS的方案.


2, 客户端从服务器端提供的证书中获取公钥, 只要认证了证书, 那么公钥就是可靠的.


以上就是HTTPS的思路. 下面就详细说一下这个核心的握手过程.


 


3      SSL/TLS握手流程


如图所示


https


流程描述如下, 经过客户端于服务器端的4次传输, 则握手完成


3.1    第一次: 客户端向服务器端发送握手请求, 称之为client-hello


客户端需要在发出请求时, 携带下面的数据:
•SSL协议及版本
•加密算法
•客户端随机数(用于生成会话密钥)
•其他信息


 


3.2    第二次: 服务器端向客户端回应, 成为server-hello


服务器端, 接收到客户端请求后, 先确认SSL/TLS版本. 如果支持, 则向客户端发送如下数据:
•SSL协议及版本
•服务器端随机数(用于生成会话密钥)
•加密算法
•服务器证书,包含公钥
•[要求客户端证书]可选的


其中要求客户端证书是可选的, 在服务器需要确认客户端身份时需要. 典型的情况就是大家使用网银时, 使用的U盾, 典型的内容就是客户端证书.


 


3.3    第三次: 客户端确认握手


客户端接收到服务器端响应后, 验证服务器证书的合法性. 包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配.


合法后, 说明此服务器端值得信任.


确认服务器端后, 客户端再次生成一个随机数(共第三个了)用于生成会话密钥, 并使用从服务器证书中获取的公钥, 对该随机数进行加密, 在向服务器发出请求时, 传递给服务器端. 该加密后的随机数称之为 pre-master-key预主密码.


此时客户端, 就可以使用约定的会话密钥生成算法, 依据生成的三个随机数来生成后边数据传输使用的会话密钥了.


此时, 客户端向服务器端再次发送请求, 携带如下内容:
•Pre-master-key(预主密码)
•编码加密改变通知
•[客户端证书]取决于上一步, 服务器端是否有要求
•客户端握手结束既签名


其中, 签名是为了校验数据不被中途篡改的.


 


3.4    第四步: 服务器端确认握手


服务器端接收到请求后, 如果要求客户端证书, 则先校验证书的合法型.


校验通过后, 利用拥有的私钥, 解密传递过来的预主密码, 获取第三个随机数.


通过第三个随机数, 形成会话密钥. 与客户端的算法一致, 三个随机数一致, 因此形成的会话密钥也是一致的.


完毕后, 响应给客户端, 携带下面的数据:
•编码加密改变通知
•服务器端握手结束既签名


 


3.5    握手完毕.


至此:


客户端, 服务器端相互信任


客户端, 服务器端拥有相同的会话密钥, 一次连接会话, 仅需要一个会话密钥.


额外的, 使用三个随机数作为会话密钥的生成依据, 主要是为了保证随机数的强随机性. 因为生成随机数的算法, 不能保证是完全随机的, 三个在一起, 随机性增强.


4      会话密钥加密传输


握手完成确定会话密钥后, 之后的的传输就是基于会话密钥安全传输.


就相当于将原来的HTTP协议传输的内容, 加密后再传输!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值