浅谈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 和 ...
随机推荐
- WindowsServer -------------部署软件
1.windowsServer 中创建 lls 在服务器中创建lls 参考 将文件扩展名调出 2.安装数据库 将数据库传递到服务器中 安装sqlserver 数据库 3.在系统中创建文件存 ...
- js 实现 promise
本文仅用于个人技术记录,如误导他人,概不负责. 本文有参考其他文章,不过地址忘了~~~. ======================================================= ...
- spring的15个经典面试题
总结Spring框架的15个经典面试题. 什么是Spring框架? Spring是一种轻量级框架,旨在提高开发人员的开发效率以及系统的可维护性. 我们一般说的Spring框架就是Spring Fram ...
- wordcount实例
scala的wordcount实例 package com.wondersgroup.myscala import scala.actors.{Actor, Future} import scala. ...
- Python转义序列
正则表达式参考:https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
- SpringBoot 通过jjwt快速实现token授权
A 10分钟了解JSON Web令牌(JWT)https://baijiahao.baidu.com/s?id=1608021814182894637&wfr=spider&for=p ...
- c#WinForm中TeeChart控件的注册和使用
首先要注册好TeeChart控件,注册方法参考:https://blog.csdn.net/my_clear_mind/article/details/79741020 完成注册之后,新建一个WinF ...
- dotnet学习系列
这里整理下之前关于dotnet方面的文章索引. 一.dotnet core 系列 dotnet core 微服务教程 asp.net core 系列之并发冲突 asp.net core 系列之中间件进 ...
- Windows 计算机取证
windows安全账号管理(SAM) Unveilling The Password Encryption Process Under Windows –a Practical Attack 上述这篇 ...
- Docker 的操作命令记录
docker ps:列出正在运行的 container docker ps -a:列出所有的 container docker rm [containerid]:移除 container(可并列多个, ...