HTTPS 是互联网上流行的安全超文本传输协议,它能保证数据传输过程中的保密性和完整性。谷歌、苹果等互联网巨头都在力推 HTTPS,其平台对于传统的 HTTP 展示警告,甚至拒绝接入,国内大型互联网公司也开始启用全站 HTTPS。本文对 HTTPS 相对于 HTTP 差异的 SSL/TLS 的原理和交互流程进行梳理,以便理解 HTTPS 的原理流程。

作者:王克锋
出处:https://kefeng.wang/2018/03/12/https-protocol/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 HTTPS 的本质

  • HTTP(HyperText Transfer Protocol)是超文本传输协议,它基于 TCP 实现,请求和响应双方都采用约定格式的 Header+Body 进行交互,关于 HTTP 协议的细节本文不再赘述。HTTP 基于明文传输,传输途中存在被监听和篡改的风险;
  • SSL/TLS(Secure Sockets Layer/Transport Layer Security)是安全传输协议,用于保障所传输数据的保密性和完整性;
  • HTTPS(Hypertext Transfer Protocol Secure,常称为 HTTP over SSL|TLS)是安全超文本传输协议,是在 TCP 之上进行了加密之后,再基于 HTTP 传输,它是安全的。


可见,SSL/TLS 是在 TCP 之上加了一层加密等处理,不影响原有的 TCP 和 HTTP,上下都是透明的。

2 SSL/TLS 概述

参考资料: 维基百科 - 超文本传输安全协议 (HTTPS)
参考资料: 维基百科 - 传输层安全性协议 (SSL/TLS)

2.1 主要功能

  • 防冒充(pretending): 验证交互双方(通常只是对服务端)身份的真实性;
  • 防窃听(eavesdropping): 对传输的数据进行加密,即使被截获也无法被识别;
  • 防篡改(tampering): 确保接收方收到的数据是原始未篡改过的,若被篡改能识别出来并丢弃;

2.2 SSL 协议

SSL(Secure Sockets Layer)安全套接层协议,由网景公司(Netscape)随着 HTTPS 一并推出。

  • SSL 1.0: 于 1994 年设计,但未发布,存在严重的安全漏洞;
  • SSL 2.0: 于 1995 年发布,存在数个严重的安全漏洞;
  • SSL 3.0: 在 1996 年发布,完全重新设计。IETF 通过 RFC 6101 发表。
    2014年10月,Google 在 SSL 3.0 中发现设计缺陷,建议禁用此一协议。
    而且,对于低版本的 TLS,攻击者可以向 TLS 发送虚假错误提示,然后将安全连接强行降级到过时且不安全的 SSL 3.0,然后就可以利用其中的设计漏洞窃取敏感信息。
    所以,Google/Mozilla/微软都在自己公司相关产品中陆续禁止向后兼容,强制使用 TLS 协议。

2.3 TLS 协议

TLS(Transport Layer Security)传输层安全性协议,由 IETF 基于 SSL 标准化并推出。

  • TLS 1.0: 1999 年发布 RFC 2246,与 SSL 3.0 差异非常小,TLS 1.0 允许降级到 SSL 3.0,所以也是不安全的;
  • TLS 1.1: 2006 年发布 RFC 4346,提高了安全性;
  • TLS 1.2: 2008 年发布 RFC 5246,再次提高了安全性;
  • TLS 1.3(草案): 2018 年发布 draft-ietf-tls-tls13-28,再次提高了安全性,是建议标准。

SSL 所有版本、还有 TLS 1.0,都存在漏洞,不要使用;
目前使用广泛的是 TLS 1.1 / TLS 1.2。
TLS 1.3 尚在草案阶段。

3 SSL/TLS 交互过程

这里有个重要依据是RSA公钥加密算法:

  • 对于数据交换双方,都拥有自身的公钥和私钥,私钥都为自己私藏,公钥都向对方公开;
  • 同样一个数据,发送方使用自身的私钥加密,接收方收到后可以用发送方的公钥解密。

SSL/TLS 交互过程如下图所示:

3.1 双方协商交互参数

客户端发送 ClientHello 消息,组成部分如下:

  • 客户端生成的随机数(RNc=Random Number of Client):后面用于生成“会话密钥”
  • 支持的 SSL/TLS 协议版本:比如 TLS1.2
  • 支持的加密算法: 比如RSA公钥加密
  • 支持的压缩算法

服务端响应 ServerHello 消息,组成部分如下:

  • 服务端生成的随机数(RNs=Random Number of Server):后面用于生成“会话密钥”
  • 确认使用的 SSL/TLS 协议版本:比如 TLS1.2,这是挑选的双方都支持的协议版本,如果没有共同版本,则握手失败
  • 确认使用的加密算法: 比如RSA公钥加密
  • 确认使用的压缩算法

3.2 双方交换并验证证书

服务端和客户端都可以有证书(客户端证书只出现在对安全性要求极高的情形,比如银行向用户提供的U盾里就包含有客户端证书),以证明自己身份的真实性。
证书包含自己的名称、受信任的证书颁发机构(CA)和自己的公钥,这些证书通常基于 X.509。
证书验证的依据是:双方都预先安装公信的根证书颁发机构证书,可使用它们来验证双方的证书的有效性。
需要注意的是,握手阶段的通信都是明文的。

  • 服务端:向客户端发送服务端证书(证书中包含服务端公钥),并向客户端索要客户端证书;
  • 客户端:收到服务端证书后,验证其身份有效性(可信机构颁发、域名一致、未过期等),如验证失败则握手失败,如成功则从中取出服务端公钥;
  • 客户端:向服务端发送客户端证书(证书中包含客户端公钥);
  • 服务端:收到客户端证书后,验证其身份真实性,如验证失败则握手失败。

3.3 双方生成“主密钥”

  • 客户端对随机数值(RNc+RNs)作哈希,并用自己的公钥私钥、对方公钥签名,并发送给服务端;
  • 服务端以同样算法(自己的公钥私钥、对方公钥),检查客户端发送的哈希签名;
  • 客户端生成随机数,称之为“预置主密钥”(PMS=Pre Master Secret),用于“主密钥”的因子。并用客户端私钥加密,再发送给服务端,服务端使用客户端公钥解密取得 PMS,至此双方有相同的 PMS;
  • 双方使用一致的算法生成相同的“主密钥”(MS=Master Secret):RNc+RNs+PMS,然后使用自己的公钥和私钥,再加上对方的公钥。

3.4 完成握手并开始交互

双方都使用“主密钥”作为加密和解密的密钥,完成握手。
此后,数据传输的记录层(Record layer)数据可以被随意压缩、加密,对方可以还原为普通的 HTTP 请求,进行交互。

4 拓展阅读

  • 掘金: 深入理解HTTPS协议
  • Microsoft: SSL/TLS in Detail
  • Moserware: The First Few Milliseconds of an HTTPS Connection
  • Wikipedia: Transport Layer Security
  • StackExchange: How does SSL/TLS work?

HTTPS 协议原理和流程相关推荐

  1. https协议原理过程

    https协议原理过程 https概念 https是基于安全目的的Http通道,其安全基础由SSL层来保证.最初由netscape公司研发,主要提供了通讯双方的身份认证和加密通信方法.现在广泛应用于互 ...

  2. HTTPS协议原理分析

    HTTPS协议原理分析 HTTPS协议需要解决的问题 HTTPS作为安全协议而诞生,那么就不得不面对以下两大安全问题: 身份验证 确保通信双方身份的真实性.直白一些,A希望与B通信,A如何确认B的身份 ...

  3. https协议--SSL加密流程

    文章目录 https协议格式: https加密流程(SSL加密流程) https加密流程总结: https-即加密的http协议,使用了SSL加密. hhtp服务端口:80 https服务端口:443 ...

  4. 【基础协议】HTTP/HTTPS协议及其工作流程

    目录 1 HTTP协议与HTTPS协议 1.1 HTTP协议概述 1.2 HTTPS协议概述 1.3 HTTPS与HHTP区别 2 URI和URL相关知识 2.1 URI统一资源标识符 2.2 URL ...

  5. HTTPS协议原理透析

    1.HTTPS本身并非协议,而是标准的HTTP协议架在SSL/TLS协议之上的一种结构.(一种不太合适的说法可以认为是两种协议的叠加).HTTP是工作在OSI7层模型的最上层,就是第7层:Applic ...

  6. HTTPS原理与流程

    Table of Contents HTTP HTTPS 实现原理 工作流程 对称加密与非对称加密 CA 颁发机构 总结 HTTP HTTP(Hypertext Transfer Protocol)超 ...

  7. 计算机网络——HTTP协议原理

    摘要 在日常的开发中,很多开发的同学可能很少了解的HTTP协议的底层原理.HTTP协议的底层涉及到请求响应模型,HTTP的工作流程.cookie和session的原理等.本博文主要介绍计算机网络中HT ...

  8. 计算机网络——ICMP/IGMP协议原理

    摘要 ICMP全称是Internet Control Message Protocol,也就是互联网控制报文协议.网络包在复杂的网络传输环境里,常常会遇到各种问题.当遇到问题的时候,总不能死个不明不白 ...

  9. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    原文 浅谈HTTPS以及Fiddler抓取HTTPS协议 最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求 ...

最新文章

  1. 老板说 10 分钟可改完 Bug,为什么我却干了 3 小时?
  2. jQuery 技术揭秘
  3. Python开发笔记之正则表达式的使用
  4. RabbitMQ (三)消息重试
  5. ABAP 动态 SQL
  6. 企业架构(六)——TOGAF总论及架构开发方法(ADM)概述
  7. 3.2.1 OS之虚拟内存的基本概念(局部性原理、高速缓存、虚拟内存的实现)
  8. docker 安装 vsftpd
  9. MegaCli 监控Raid状态
  10. linux 运行apj,pxe+ris-linux实现在DELL R710上网络安装windows2003
  11. php 大型系统开法流程图,有一个php项目源码,如何搞清楚执行过程?画出其流程图...
  12. Metal入门教程(二)三维变换
  13. java多态的实现_Java多态的实现机制是什么,写得非常好!
  14. PPT表格要怎样让设计秒变高级
  15. 解决Mac下应用“已损坏”或“将对您的电脑造成伤害”
  16. 网易秋招编程题——优雅的点
  17. linux编译lame,lame mp3 源码 分析
  18. ssrf漏洞修复(ssrf漏洞修复方式)
  19. 中国气象网 气象数据开放平台 API使用方法 (Android)(已废弃)
  20. 爱快软路由+panabit上网行为管理

热门文章

  1. 河南高二计算机模拟试题,2020河南银保监会考试题库:计算机类模拟试题练习(六)答案...
  2. vba数组如何精确筛选_Excel VBA 数组知识点,数组能不能用好,就看这个你学会没有...
  3. 千万级数据导出Excel
  4. python自定义函数判断一个数是否大于0_Python_代码练习_写一个判断是否为小数的函数...
  5. 3D可视化孪生系统之燃气展示方案
  6. Series索引、切片
  7. SAP ALV 详细说明
  8. 三星手机实现airtest自动化屏幕显示比例小或测试报告中操作的位置未显示在图片上
  9. SSL证书申请及自动续期(acme.sh)
  10. Linux环境下使用 USB转串口驱动(二)