浅谈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 和 ...
随机推荐
- 最简单的 kubernetes 高可用安装方式
sealos 项目地址:https://github.com/fanux/sealos 本文教你如何用一条命令构建 k8s 高可用集群且不依赖 haproxy 和 keepalived,也无需 ans ...
- 【BZOJ4833】最小公倍佩尔数(min-max容斥)
[BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...
- 《 .NET并发编程实战》实战习题集 - 3 - CRUD项目中使用FP
先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.
- How to get the free disk space in PostgreSQL (PostgreSQL获取磁盘空间)
Get the current free disk space in PostgreSQL PostgreSQL获取磁盘空间 from eshizhan Here has a simple way t ...
- EF连接mysql,出现A call to SSPI failed错误,解决办法
我的使用场景是用EF连接AWS的mysql RDS,会偶发性的出现A call to SSPI failed错误, System.AggregateException: One or more err ...
- kafka源码导入idea/eclipse
先进入源码工程:执行gradle idea或者gradle eclipse 之后再导入idea/eclipse
- 深入理解 Kubernetes 资源限制:CPU
原文地址:https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernet ...
- 阅读prettytable 一些代码、get、set 检查参数
阅读代码是因为我发现官方教程里的代码在本地不能用,所以就通过”查看定义“转到了源代码里. 通过阅读源代码,查看方法内是否有教程中所说的方法名和参数名,然后再通过”查看引用“来试图了解函数的流程,如果没 ...
- Linux目录结构(1)
/bin[重点](/usr/bin./usr/local/bin):存放常用命令 /sbin:存放的是系统管理员使用的系统管理程序 /home[重点]:存放普通用户的主目录,在linux中每个用户都有 ...
- EntityFramework 基类重写
/* * ------------------------------------------------------------------------------ * * 创 建 者:F_Gang ...