HTTPS连接建立过程(单向&双向)
HTTPS连接建立过程(单向&双向)
什么是https
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层(如TCP)与应用层(如HTTP)之间对网络连接进行加密。
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层
- https的基础是TLS,tls的基本原理是非对称加密,即加密的密钥和解密的密钥是不用的,称为公钥和私钥,使用公钥加密的内容只能使用私钥解密,反之亦然,使用私钥并不能解密私钥加密的内容
- https连接建立过程分为两部分 一是身份验证部分(验证通信双方各自的身份),二是密钥协商部分(协商出一个双方都认可的对称密钥)
- https的重点如下
- 客户端及服务器的有效性及真实性,确保没有第三方监听,通过CA机构及非对称加密保证
- tls握手及密钥协商过程使用非对称加密,加强身份验证及防监听
- 由于非对称加密的性能极差,所以仅在握手阶段使用非对称加密
- 后续消息通过协商的密钥进行加密,防篡改和防监听
TCP连接建立流程

HTTPS单向认证
什么是HTTPS单向认证
- https单向认证至客户端连接到某个域名或IP时,客户端需要验证服务器的身份,
服务器的身份一般通过证书的方式进行验证,服务器的证书一般都会在权威的CA机构进行签名,客户端收到服务器证书后,
会获取服务器证书对应的ca机构的证书,并用CA证书进行解密
身份认证过程
- 一般使用非对称加密算法做身份认证
- RSA
- DSA
- ECDSA

密钥协商过程
- 有多种算法
- RSA 通过非对称加密保证安全性
- DH类算法 通过 "求解离散对数问题" 保证安全性 只能防监听,不能防篡改,所以一般会结合非对称加密算法(RSA,DSA,ECDSA)等做加密
- ECDH类算法 通过 "椭圆曲线离散对数问题" 保证安全性 同上
- DHE DH算法增强 E->ephemeral 指“临时密钥”(洋文是“ephemeral key”)即每个会话都选择新的密钥
- ECDHE ECDH算法增强 同上
- PSK 预共享密钥(一般用于内部部署,预置密钥在系统内部)
- SRP Secure Remote Password,与psk类似,密钥换成了密码,还会有一些类似于加盐,随机数之类的机制

连接流程
- ECDHE-RSA的连接及认证过程


身份认证
Client Hello 发送客户端支持的加密协议 及TLS版本 客户端随机数

- sessionId和sessionTicket均可用于https会话恢复,区别在与sessionId对应的协商信息保存在服务器中,sessionTicket对应的协商信息保存在客户端中
- 客户端extension中携带session ticket信息表示客户端支持session ticket
- 关于扩展字段 pre_shared_key 和psk_key_exchange_modes,可以参考http://ddrv.cn/a/17072
- 本例中客户端不传递pre_shared_key指明客户端不使用PSK(预共享密钥模式,一般用在个人网络里面)
Sever Hello 发送服务器选择的加密协议及选择的TLS版本,服务器随机数
- 本例中使用的是ECDHE-RSA算法

- 本例中使用的是ECDHE-RSA算法
Certificate 服务器发送自己的证书

密钥协商
Server Key Exchange 服务器发送协商对称密钥过程中的必要参数
- DH类算法因为没有使用私钥进行计算,所以在末尾会使用私钥对报文本身进行签名,证明自己拥有私钥

- DH类算法因为没有使用私钥进行计算,所以在末尾会使用私钥对报文本身进行签名,证明自己拥有私钥
Server Hello Done
- 指示 Server Hello完成
Client Key Exchange 客户端发送协商密钥过程中的必要参数(使用服务端证书中的公钥加密)
- 客户端收到服务器发送的必要参数,并使用自己的必要参数,计算出一个对称密钥
- 客户端必要参数发送给服务端后,服务端也能通过这些参数以及第5部中的参数计算出一样的对称密钥

Client change Cipher Spec
- 更改数据传输密钥通知,表示后续的请求都会使用协商好的对称密钥进行加密
Encrypted Handshake Message
- 使用对称密钥加密过后的握手消息,用来验证对称密钥是否工作
New Session Ticket
- 由于之前Client Hello及Server Hello都指明了可以使用Session Ticket,所以服务器下发了一个新的Session Ticket,下次客户端需要恢复回话时,可以省去协商密钥的过程
Server change Cipher Spec
- 更改数据传输密钥通知,表示后续的请求都会使用协商好的对称密钥进行加密
Encrypted Handshake Message
- 使用对称密钥加密过后的握手消息,用来验证对称密钥是否工作
HTTPS双向认证
https双向认证指除了客户端需要验证服务器之外,服务器也需要验证客户端
连接流程


- 步骤详解
- 双向认证过程中的大部分步骤是相同的,只是多了服务器请求客户端证书以及客户端发送证书及签名的过程
- 这里仅解释不同的部分
- Server Certificate Request
- 服务器请求客户端证书用于验证客户端身份

- Client Certificate
- 客户端发送自己的证书或证书链

- Client Certificate Verify
- 与server key exchange一样,为了证明自己的身份,客户端需要使用私钥对之前的握手信息加密
- 服务器使用客户端证书公钥解密,如果一致的话才会通过验证

nginx中的配置
ssl_certificate /etc/nginx/cert2/server.crt; #服务器证书位置
ssl_certificate_key /etc/nginx/cert2/server.private;#服务器证书私钥文件位置
ssl_client_certificate /etc/nginx/cert2/ca.crt;#用于客户端证书校验的证书文件位置,意为客户端证书必须由此证书对应的ca机构签发
ssl_verify_client on;#是否开启客户端校验
ssl_verify_depth 2;#客户端校验深度,如果为1的话,代表客户端证书必须由顶级ca签发
附录
| 算法组合 | 密钥交换 | 身份认证 | 是否会遭遇中间人攻击 | 是否具备前向保密 | SSL 2.0 | SSL 3.0 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3(草案) |
|---|---|---|---|---|---|---|---|---|---|---|
| RSA | RSA | RSA | 否 | 否 | 是 | 是 | 是 | 是 | 是 | 否 |
| DH-RSA | DH | RSA | 否 | 否 | 否 | 是 | 是 | 是 | 是 | 否 |
| DH-DSA | DH | DSA | 否 | 否 | 否 | 是 | 是 | 是 | 是 | 否 |
| DHE-RSA | DHE | RSA | 否 | 是 | 否 | 是 | 是 | 是 | 是 | 是 |
| DHE-DSA | DHE | DSA | 否 | 是 | 否 | 是 | 是 | 是 | 是 | 是 |
| ECDH-RSA | ECDH | RSA | 否 | 否 | 否 | 否 | 是 | 是 | 是 | 否 |
| ECDH-ECDSA | ECDH | ECDSA | 否 | 否 | 否 | 否 | 是 | 是 | 是 | 否 |
| ECDHE-RSA | DHE | RSA | 否 | 是 | 否 | 否 | 是 | 是 | 是 | 是 |
| ECDHE-ECDSA | DHE | ECDSA | 否 | 是 | 否 | 否 | 是 | 是 | 是 | 是 |
| PSK | PSK | PSK | 否 | 否 | 否 | 否 | 是 | 是 | 是 | ? |
| PSK-RSA | PSK | RSA | 否 | 否 | 否 | 否 | 是 | 是 | 是 | ? |
| DHE-PSK | DHE | PSK | 否 | 是 | 否 | 否 | 是 | 是 | 是 | ? |
| ECDHE-PSK | DHE | PSK | 否 | 是 | 否 | 否 | 是 | 是 | 是 | ? |
| SRP | SRP | SRP | 否 | 否 | 否 | 否 | 是 | 是 | 是 | ? |
| SRP-RSA | SRP | RSA | 否 | 否 | 否 | 否 | 是 | 是 | 是 | ? |
| SRP-DSA | SRP | DSA | 否 | 否 | 否 | 否 | 是 | 是 | 是 | ? |
| DH-ANON | DH | 无 | 是 | 否 | 否 | 是 | 是 | 是 | 是 | 否 |
| ECDH-ANON | ECDH | 无 | 是 | 否 | 否 | 否 | 是 | 是 | 是 | 否 |
参考资料
HTTPS连接建立过程(单向&双向)的更多相关文章
- HTTPS实战之单向验证和双向验证
转载自:https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA 原创: 涛哥 coding涛 6月9日 作者对https 解释的入目三分啊 (全文太长,太懒 ...
- https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL_转
转自:https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL 因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料, 这里做一个总结. 1. 首 ...
- Loadrunner对https协议(单双向SSL)的web端性能测试
1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务 ...
- 使用loadrunner对https协议(单双向SSL)的web端性能测试 (转)
1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务 ...
- HTTPS建立过程
由于HTTPS建立过程经常忘记,固记录 HTTPS建立流程 客户端发起SSL连接 服务端发送证书(证书中包含了服务端公钥) 客户端根据已有证书判断是否是可信任的(客户端决定是否继续) 服务端要求客户端 ...
- 网络安全——一图看懂HTTPS建立过程
关于网络安全加密的介绍可以看之前文章: 1. 网络安全--数据的加密与签名,RSA介绍 2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512) 3. When I ...
- 详解BLE连接建立过程
同一款手机,为什么跟某些设备可以连接成功,而跟另外一些设备又连接不成功?同一个设备,为什么跟某些手机可以建立连接,而跟另外一些手机又无法建立连接?同一个手机,同一个设备,为什么他们两者有时候连起来很快 ...
- 图解HTTPS建立过程
阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...
- HTTPS数据传输过程简介
HTTPS数据传输过程 1.客户端发起HTTPS连接握手 2.服务端收到HTTPS握手连接请求,与客户建立握手过程,和TCP的三次握手类似,并发送一系列的加密算法组合给客户端,与客户端协商加密算法组合 ...
随机推荐
- Java实现 蓝桥杯VIP 算法提高 夺宝奇兵
算法提高 夺宝奇兵 时间限制:1.0s 内存限制:512.0MB [题目描述] 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: ...
- Java实现 LeetCode 72 编辑距离
72. 编辑距离 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字 ...
- 卷积生成对抗网络(DCGAN)---生成手写数字
深度卷积生成对抗网络(DCGAN) ---- 生成 MNIST 手写图片 1.基本原理 生成对抗网络(GAN)由2个重要的部分构成: 生成器(Generator):通过机器生成数据(大部分情况下是图像 ...
- php symfony/var-dumper 打印插件
$records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), arr ...
- org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate——解决方案汇总
近期将自己本地的 maven 仓库进行了迁移,idea 的版本也升级到了IntelliJ IDEA 2019.3.3 x64,但是遇到了 Plugins 报红的情况,尝试很多方法,终于解决,现在做一下 ...
- 启动fiddler情况下,网络连接错误[Fiddler] The connection to ** failed.解决办法
这种错误是由于浏览器设置了代理,而代理服务器配置不正确导致 解决办法 1.关闭浏览器服务器代理,设置-高级-网络代理 2.检查网络代理设置是否正确,Fiddler中配置的端口号需要跟浏览器中配置的端口 ...
- Ubuntu18.04下MySQL8.0和Navicat15的安装与使用
目录 一.MySQL8.0安装 二.Navicat安装并与MySQL连接 一.MySQL8.0安装 注意:若直接 sudo apt install mysql-server,你会发现安装后的版本是5. ...
- Spark GraphX从入门到实战
第1章 Spark GraphX 概述 1.1 什么是 Spark GraphX Spark GraphX 是一个分布式图处理框架,它是基于 Spark 平台提供对图计算和图挖掘简洁易用的而丰 ...
- Phoenix入门到实战(一)
问题导读1.你认为Apache Phoenix与HBase的关系是什么?2.Phoenix安装需要哪些软件?3.如何部署Phoenix? Introduction Apache Phoenix i ...
- 关于MYSQL的查询时间段、删除数据、查询目标行的命令用法。
Q1.第一次工作写命令时,写了一个把一个表的数据插入到另一个表中,运行时命令长时间处于执行状态. A.第一次处理数据库大量数据,长时间按运行属于正常现象,这与学校中的小数据不同. Q2.如何查询数据库 ...