白话HTTPS加密机制
在讲主题之前,我们先来区分两个概念:签名和加密有什么区别?
我们从字面意思看:
签名就是一个人对文件签署自己的名字,证明这个文件是我写的或者我认可的,所以只要别人看到我的签名,认识我字迹的人就知道这个文件确实是可以信任的,如果文件没有我的签名,或者签名不对,说明文件可能被改动了,是个假的,不可信。在网络安全中,签名的意义是防止文件篡改,只有签名正确的文件才可信。
加密就是将一段内容按照一定规则打乱,让不懂规则的人看不懂这段文字内容,而知道规则的人可以将乱序的内容反推出原文来,从而实现了内容在传递过程中不被不相关的人所理解,达到安全的目的。
为什么要讲这两个东西呢?因为这两个概念在HTTPS加密过程中是很重要的概念,他们解决了安全传输中的两个重要问题:
- 保证信息在传输过程中是加密的状态,
- 保证信息不被篡改
正题
为了生动的讲述加密过程,我们利用一段角色故事来说明:
故事里有三个角色:分别是小红A,小强B,和小贱C.
小红A代表服务器,小强B代表客户端,小贱C代表中间劫持者。以下用ABC简称。
故事是这样的:小红和小强互相爱慕对方,但是二者离得有点远,只能通过扔纸条的方式把信息传递给对方。而C特别好奇,就老想在中间把纸条拦截下来偷看(注意,C的目的是偷看信息,而不是破坏消息,当然去如果他能破解里面的信息,可以往里面加入一些假的东西,比如离间AB,但前提还是要破解消息内容),显然A和B是不愿意的,所以他们要想出一个办法,既要实现二者的沟通,又要实现信息的“保密”。
他们想到了以下几种方案:
方案1:
A和B用一套相同的规则对消息进行加密和解密,这套规则需要一个字符串x作为密钥来加密和解密,这样C不知道x的话即使截获到了消息也看不懂内容。
这套方案就是对称加密方案,对称加密方案效率高,但是有个很大的缺陷:A和B怎么商定这个x呢?第一次传递的时候明文把x传递给对方吗?显然不行,因为可能被C截获到,这样C也能解密消息了。
这个时候,人们发明了一种神奇的盒子,这个盒子可以实现只有拥有者可以解开这个盒子,别人只能往里塞信息,却打不开,看不到里面装了啥,A和B正犯愁呢,听说这个神奇的盒子后,想出了一套新的方案:
方案2:
A和B都拿了个黑盒子,他们互相把自己的黑盒子扔给对方,然后彼此把消息放到黑盒子里,扔回去,然后A和B从盒子里拿出对方发送的消息。这样就解决安全问题了,但是有个很大的缺点,就是每条信息两个人都要向黑盒子里塞东西,这个过程太麻烦了,效率很低,于是AB又开始发愁了。
方案二是用的纯非对称加密的方法,其中黑盒子就是非对称加密的公钥,往盒子里扔东西就是用这段公钥对信息加密的过程,之后带有信息的黑盒子只有利用私钥才能解开。
故事里往黑盒子里塞东西的过程很“麻烦”,其实就是非对称加密缺点,计算量大,使得效率降低,因此HTTPS也没有采用这个方案。那么有没有更好的方案呢?当然有~,我们看方案1,其实最大的问题就是密钥x的商讨问题,即A和B怎么互相确定对称加密密钥x,而且还不能明文传输让别人知道,于是有第三套方案
方案3:
A这样操作:给B扔一个黑盒子,B拿到盒子以后,往里放一段随机生成的密钥x,扔回了A。这个过程即是被C截获了,C也拿不到盒子内部的东西,所以是安全的。之后A从盒子里把B给他的密钥拿出来,然后他们就用这段密钥x通过方法1的方式沟通了。
该方法就是现在HTTPS的加密方法,利用的非对称加密+对称加密的方式结合的方式,非对称加密传递确认对称加密的密钥x,之后完全用对称加密传送信息。
那么这套方案就没有漏洞了吗?聪明的C又想出来一个办法:在截获A给B黑盒子时,他也买了一个黑盒子,把这个A给的黑盒子替换成自己的盒子,给了B,B拿到“假盒子”后,把密钥x放了进去,C又截获了这个带有x的黑盒子,因为是自己买的黑盒子,当然能解开了,所以就拿到了密钥x。然后他把x放进A的真盒子,扔给了A,这时A不知道发生了什么,使用盒子里的x作为后续交流的密钥,跟B进行后续的沟通。而其实,C早就知道他俩的密码了,随时都可以拿到消息进行解密。
因此,这套方案唯一的问题就是:B怎么知道它拿到的黑盒子就是A给的??现实中,盒子就是一个公钥,只是一个字符串,怎么知道这个字符串就是网站的呢?这个问题确实难倒了A,她想在现实生活中寻找答案:我快递给了别人一个号码,怎么证明这个号码是我的,而且中间没有人改过?她突然想起了自己的身份证,身份证号码是一个人的唯一标识,当我告诉别人我的身份证号码时,别人怎么相信的这个号码是我的?给他身份证看!小红感觉灵感来了,她接着想,别人为什么看到身份证就相信了呢?很简单,身份证上有我的名字,有我的ID,最重要的,身份证是公安局发的,别人伪造不了!于是小红想出了一套解决方案,方案的关键就是去“公安局”制作一套“公钥身份证”。
其实现实中的HTTPS,正是采用了小红的方案,身份证号码可以类比网站公钥,身份证姓名头像可以类比网站域名等相关信息,我们来看详细的解决过程:
如何证明客户端收到的公钥是该网站的公钥
HTTPS采用的类似于身份证的方法,所有用HTTPS的网站都要有一个“公信”机构颁发的证书,证书就像一个身份证一样,客户端可以对其进行真实有效性判断。而这个公信机构就是CA,身份证的防伪手段采用的就是数字签名,后面会详细阐述。我们以小红把身份证寄给小强为例:这个过程分为四步:
1.小红把去公安局制作印有公钥信息的“身份证”。
- 把身份证寄给小强。
- 小强拿到身份证,验证身份证真伪,
- 身份证是真的还不够,因为小贱也可以去公安局做“身份证”,把小红的快递调包。所以小强还要看身份证内容,比如看名字,头像是不是小红。
以上四步完成以后,后续操作同方案3:小强从身份证上读取公钥,利用该公钥对随机数X加密,blabla...
我们依次看这四步对应到HTTPS中是怎么实现的。
- 制作“身份证”:制作机构是国际组织CA,它负责颁发给申请者一份证书。证书包含两部分,内容和签名,内容就像身份证上的身份证号,姓名等,签名就像身份证的防伪手段一样,防止证书内容被篡改。CA利用非对称加密制作签名,它先将明文的证书内容进行hash,然后对hash值利用私钥加密生成签名,最后把签名和内容一块发给网站,就是网站的证书。至于证书怎么防伪的,在小强验证的时候会详细说明。
- 寄快递:自然是通过网络传输,服务端把证书传递给客户端。注意,原来方案三传输的是明文的公钥,现在公钥写在了证书上,传输的是证书。
- 小强收到快递,验证真伪:如何验证呢?之前说到,CA制作签名时用的私钥,而客户端都有CA的公钥(是的,操作系统,浏览器等都存有CA的证书,可以拿到其公钥),用公钥对证书签名解密得到一段字符串,拿它跟证书内容的hash值对比,如果相同,则说明证书是可靠真实的。为什么呢?试想,第三方截获内容,把内容修改了,比如把证书内容里的域名从www.baidu.com改成了www.google.com,但是因为第三方没有CA的私钥,所以没法将改动后的内容进行加密,如果用错误的密钥加密,用户验证的时候签名是对不上的,因此第三方是改不了证书内容的。也就是说,一个网站在全世界只有这一份唯一的证书,永远没有人能改动它,只要改了,就能被识破。整个过程可以借用网上的一个图片来解释,见文末。
- 读取身份证内容:很简单,看证书内容就可以了,证书的内容里包含了网站的域名等信息,如果第三方攻击者把整个证书文件更改了(包括签名和内容),比如上面的百度变谷歌,客户端本来想跟百度交流的,但看到内容里写的是谷歌,就拒绝跟它沟通,就像你拿到了张三给的身份证,但是上面写着王五,当然你就不理他了!
注意,有个地方容易混淆,即加密过程牵扯到了两对公私钥:CA对证书的加密私钥对应客户端早以安装的CA解密公钥;客户端对X加密的公钥和服务端对X解密的私钥。其中X即上文中写的对称加密的密钥,整个过程客户端用了两个公钥,CA和服务端各有一个私钥。
最后用通俗的话总结这个过程:小红向公安局申请身份证,身份证上写着她的名字以及她跟小强交流用的公钥,公安局制作完毕后给小红,小红拿着身份证寄给了小强,之后小强通过上面的防伪标志和姓名确认了其真伪和正确,用上面的公钥给随机生成的x加密,还给了小红,小红拿着自己的私钥解出了x,二者用x愉快的交流起来~~~
以上就是HTTPS加密的原理浅析,有漏洞之处,欢迎指出~
白话HTTPS加密机制的更多相关文章
- HTTPS 加密机制
目录 1. HTTPS 概述 2. 对称加密 3. 非对称加密 4. 非对称加密改良方案 5. 非对称加密 + 对称加密 6. 中间人攻击 7. 数字证书 8. 数字签名 9. HTTPS 工作原理 ...
- HTTPS通信机制
概述 使用HTTP协议进行通信时,由于传输的是明文所以很容易遭到窃听,就算是加密过的信息也容易在传输中遭受到篡改,因此需要在HTTP协议基础上添加加密处理,认证处理等,有了这些处理机制的HTTP成为H ...
- https 加密、http2.0、keep-alive
原文地址:https://ainyi.com/44 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议 ...
- HTTPS加密越来越流行,为何要加密?
继谷歌之后,国内最大的搜索引擎百度在2015年5月实现了全站HTTPS加密.搜狗搜索.360搜索.bing搜索.淘宝.天猫.知乎等也都实现了全站HTTPS加密,互联网即将迎来全网HTTPS加密时代. ...
- 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密
前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...
- HTTPS加密流程理解
HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...
- nginx的压缩、https加密实现、rewrite、常见盗链配置
Nginx 压缩功能 ngx_http_gzip_module #ngx_http_gzip_module 用gzip方法压缩响应数据,节约带宽 #启用或禁用gzip压缩,默认关闭 gzip on | ...
- 安全篇-AES/RSA加密机制
在服务器与终端设备进行HTTP通讯时,常常会被网络抓包.反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数.为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数 ...
- HTTPS加密原理与过程
HTTPS加密原理与过程 HTTP 超文本传输协议一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡 ...
随机推荐
- HDU 1003 Max Sum * 最长递增子序列(求序列累加最大值)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- codeforces 805 D. Minimum number of steps(数学)
题目链接:http://codeforces.com/contest/805/problem/D 题意:只有一个操作就是将ab变成bba直到不能变为止,问最少边几次. 题解:这题可以多列几组来找规律, ...
- 企查猫app数据解密
通过最近几天的对企查猫的研究,目前已经成功将企查猫的数据加密和响应数据加密完成解密. 和之前对启信宝APP的数据解密操作基本一样,不过企查猫对请求和响应都使用aes加密了,抓包的时候可以看到,具体可以 ...
- Python---变量和简单的数据类型
我会站在一个c/c++的基础上去看python的学习,尽量会在文中比较两者的区别,有什么说的不对的地方,欢迎指出,大家共同学习(o_o).(此后的文章都会基于python3以上版本去写) 1.变量 变 ...
- requests + BeautifulSoup + json
requests: response.text 以 unicode 格式显示响应的文本 response.content 以 二进制 格式显示响应的文本 BeautiSoup: sou ...
- 换个角度使用VUE过滤器
换个角度使用VUE过滤器 过滤器在Vue中的主要用于文本格式化,如小写转大小,日期格式化等操作.官方对这个功能介绍也很简单,不过确实很简单,就一个函数而已.但最近在做两款APP时,遇到一些特殊的需求. ...
- .net core 部署到windows上的方法与 系统中相关问题的解决
前言 Net core 项目部门在Windows有很多种方式,大致有以下几种, dotnet 命令, iis(windowshosts), 一些开源的应用容器(docker ) 基于一些exe 程序, ...
- Linux基础Day001-001章
运维工作职责:(运行和维护服务器) 1.数据不能丢失, 2.保障网站7*24H正常运行,--一直运行; 3.用户体验要好,--打开网站速度要快 服务器核心硬件(硬盘,内存,CPU) 尺寸: 1U-4. ...
- Nginx实现高可用(了解)
使用nginx实现反向代理和负载均衡时,nginx就是整个网站的入口了,所以需要保证nginx的高可用 主要资料包:链接:https://pan.baidu.com/s/1z_-xEM3uUICtZi ...
- 并发之初章Java内存模型
>>>>>>博客地址<<<<<< >>>>>>首发博客<<<<< ...