浅谈HTTPS传输过程
HTTPS是什么
HTTPS不是一个新的协议,可以理解为是一个HTTP协议的加密"版本"(HTTP+SSL(TLS))。那为什么HTTP协议需要加密,不加密会出现什么问题呢?先来了解下传统的加密方式
加密方式

对称加密:对称加密是Server和Client都拿一个相同的密钥进行加密和解密,他的优点的性能好一点,但是也存在很多问题。
问题:
1、服务器如何把密钥安全的给到客户端(存在请求被拦截、窜改)
2、假设一个客户端的密钥泄露了被公开,所有的客户端以及服务器的连接传输都是不安全的
非对称加密:非对称加密将密钥拆分为公钥、私钥,两个秘钥,私钥存在服务器不能让任何人知道,公钥则可以随意发布给任何客户端。采用此加密方式,发送方将报文用公钥加密后,接受方收到密文(加密后的报文)采用私钥进行解密拿到报文,这种方式发送方就不用获取私有就可以进行加密传输避免了密钥泄露。虽然解决了对称加密密钥传输泄露问题,但是非对称加密的性能肯定要比对称加密的方式性能低很多。其实也会存在一些安全隐患:
问题:
1、客户端无法证明公钥的来源的真实性(假设在服务端将公钥分发给客户端的过程中被攻击者拦截,并换成其他的公钥或者密钥。或者是收到了非目标服务器的公钥,两者之间的数据传输将被阻断)
2、客户端和服务端开始通讯时,MITM将客户端请求拦截掉,将自己的公钥发送给客户端(客户端以为是服务端返回的),伪造一个请求发送给服务端(服务端以为是客户端发起的),拿到服务端的公钥。那之后客户端发送的数据,MITM可以用自己的私钥解开,服务器返回的密文,MITM同样也可以用公钥解开。两端的交互MITM都知道的一清二楚,并且客户端和服务器也不会发现任何异常。当然此问题就算是HTTPS方式,过程中少了"内置公钥"同样也会发生,大家可以看完HTTPS传输过程后思考下。
HTTPS传输过程
HTTPS综合了两种加密方式的优点,在密钥交换时才用非对称加密来保证安全性(当然这个安全性还是要和CA认证机构挂钩,单纯的非对称加密肯定还是有问题的),在建立完桥梁时就采用对称加密的方式进行request和response。

- 以上有两对公私钥,一把是CA机构的公钥和私钥,一把是服务器的公钥和私钥。
- 数字签名由数字证书的明文内容组成然后通过CA机构私钥进行加密后的密文(只有CA机构的公钥可以打开)。
- 步骤2“内置公钥”的存在就是为了防止公钥在网络之中传输容易泄露的问题,浏览器或者操作系统在安装时默认就会植入一些世界公认的可信任CA机构的证书(可以理解里面包含公钥)或者是用户自主导入的根证书(比如支付宝等金融机构会提示用户安装根证书的原因)。
- 较为关键的步骤是数字签名验证阶段,再拿到服务器给到的数字证书后,用内置的CA证书的公钥去解密数字签名,解密后拿到证书的明文内容,然后和服务器发送的数字证书的明文内容做比较(数字签名=证书上的明文内容被私有加密后),如果发现不匹配,那证明证书可能被篡改过,则就会拒绝链接。
- 当然验证阶段还有一些细节的验证操作,比如:服务器返回的证书浏览器是否信任,如果不信任,交给用户去选择是否继续。明文验证等等。最关键的验证还是数字签名验证阶段
- 步骤4客户端根据服务器的算法生成一组随机数(当做对称加密的密钥),然后用之前拿到的数字证书上(服务器返回的)的公钥进行加密。
- 步骤4.1和4.2用私钥解密就拿到了与客户端之间沟通的密钥(对称加密),之后的步骤4.3.2的请求报文和响应报文都采用这个密钥进行加密
HTTPS也可能带来的安全问题
非对称加密问题2留了一个疑惑,不知道大家看完有没有想到,“内置公钥”是系统或浏览器直接默认内置的,这些内置的CA机构,上面也提到了“世界公认”比较出名的,如果想在这些出名的机构申请证书对与一些普通的网站来说需要花费昂贵的成本,而且有效期还较短,带一个通配符*的一个域名,一年就要5000块。那么随着一些中小型网站的增多,也会有一些个人认证机构。不过一些网站因买不起合法的证书因此会自己制造一个根证书用于加密传输,这些当然就是不受信任的证书。访问这种网站时,服务端就会发来一个根证书,让用户选择是否信任。
那么这种操作就给MITM带来了可乘之机,假设MITM造假一个根证书,如果用户信任了这个根证书。

- 步骤3.3.1.1.2.2.2拿到了对称密钥这次的连接就基本完蛋了,他随之可以解密之后的传输的报文。MITM让客户端和服务器互相都感觉不到异常。
- 最重要的是跳过了数字签名阶段,MITM让客户端验证了他自己申请的根证书,并把客户端发出去的请求拦截后伪造后发给服务器,神不知鬼不觉的就攻击成功了。
- 假设客户端没有信任此证书,则数字签名验证这个阶段就会失败了。
小结
看完这个问题,是不是觉得以后什么证书信息都不敢了信任了,其实也不是非得这样说,假设你经常浏览某某个人网站,而且你很了解这个网站,那不必担心。假设涉及到网银、在线支付,或是一些知名的网站,这种公司性质的网站一定会申请合法的根证书,一旦发现根证书不受信任,果断终止。不过一般的网民用户也不会经常浏览那些个人网站或者小型网站,如果遇到要信任根证书时,就果断拒绝掉吧。
浅谈HTTPS传输过程的更多相关文章
- 浅谈HTTPS以及Fiddler抓取HTTPS协议
最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...
- [转]浅谈https\ssl\数字证书
浅谈https\ssl\数字证书 http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html 全球可信的 ...
- 浅谈HTTPS以及Fiddler抓取HTTPS协议(摘抄)
一.浅谈HTTPS 我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的.目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度.谷歌等. ...
- 【转载】浅谈HTTPS以及Fiddler抓取HTTPS协议
最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...
- 浅谈https\ssl\数字证书
全球可信的SSL数字证书申请:http://www.shuzizhengshu.com 在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕 ...
- 【转】浅谈https\ssl\数字证书
转载请注明出处:http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html 全球可信的SSL数字证书申请 ...
- 浅谈HTTPS协议
前言 理解协议是做接口测试的前提.本文主要向大家展示博主对HTTPS协议的理解,网上有诸多资料,有些写得过于晦涩难懂,尤其是需要密码学的一些知识.我做了一下简单的整理,刨除复杂的底层实现,单从理解SS ...
- 浅谈HTTPS和SSL/TLS协议的背景和基础
相关背景知识要说清楚HTTPS协议的实现原理,至少要需要如下几个背景知识.大致了解几个基础术语(HTTPS.SSL.TLS)的含义大致了解HTTP和TCP的关系(尤其是"短连接"和 ...
- 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础
来自:编程随想 >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...
随机推荐
- Rider 中无法显示DataTable,VS2019的.netCore才有DataTable可视化工具(4)
如下图在vs2017中是这样的 在2019中是可以直接看的 在Rider中无论什么项目都不支持.
- OCC与MVCC 的区别
一.前言 在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发. 当多个用户/进程/线程同时对数据库进行操作时,会出现3种冲突情形: ...
- sql server报【从varchar数据类型到datetime数据类型的转换产生一个超出范围的值】错误的解决办法
产生这个错误的原因是在使用convert函数将给定的日期字符串转换为日期类型的时候,因为datetime这个数据类型有时间数值的范围限定,当超出时间范围时就抛出这个错误. 如果类型是[datetime ...
- 创建Maven项目时,GroupId和Artifact Id该怎么填写呢?
1.什么是groupid和artifactId? groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根 ...
- Blockstack: A Global Naming and Storage System Secured by Blockchains
作者:Muneeb Ali, Jude Nelson, Ryan Shea, and Michael Freedman Blockstack Labs and Princeton University ...
- SpringBoot集成JWT
JWT(json web tokens)是目前比较流行的跨域认证解决方案:说通俗点就是比较流行的token生成和校验的方案.碰巧公司有个app的项目的token采用了jwt方案,因此记录下后端 ...
- windows环境下基于nginx搭建rtmp服务器
基于nginx搭建rtmp服务器需要引入rtmp模块,引入之后需重新编译nginx linux环境几个命令行就能实现编译,笔者未尝试,网上有很多教程. windows环境还需要安装一系列的编译环境,例 ...
- lua 根据路径获取文件名
require "lfs" function dirpath(path) for file in lfs.dir(path) do -- lfs.dir 根据路径获取该路径下的文件 ...
- POJ 2516Minimum Cost(最小费用流+特判)
[题意]: 有N个人,M个仓库,每个人需要物品,个数都等于共同的K,仓库中有对应的K件物品的数量,随后给K个N*M矩阵(小写k, n, m表示K,N,M对应的子集),表明m个仓库到第n个人的位置运送k ...
- 仿照手机写一个WIFI的操作程序
本篇博客仿照手机的功能,写一个WIFI的操作程序. 手机的WIFI功能有哪些呢?当我们进入wlan的设置界面的时候,将自动识别出若干个wifi的热点,并且会自动更新,当点击某个wifi热点的时候,然后 ...