完全图解 HTTPS
安全基础
我们先来看下数据在互联网上数据传递可能会出现的三个比较有代表性的问题,其实后面提到的所有方法,都是围绕解决这三个问题而提出来的。
窃听
伪造
否认
对称密钥加密
假设 A 正在通过互联网向 B 发送数据,如果不对数据进行加密,数据就可能被恶意的第三者 X看到
因此,需要保密的数据需要进行加密再发送
- 用将数据进行加密,使其成为密文
- 把密文发送给
B B使用密钥解密从A收到的密文,这样就能得到原始数据- 因为是加密数据,即使它被恶意的第三方截获也是安全的
“对称密钥加密” 一个很重要的特点就是使用相同的密钥进行加密和解密
回到刚刚那个场景,假设 B 是没有解密钥匙的,所以 A 需要通过互联网将钥匙发送给 B
- 但是
X也有可能看到这个钥匙 - 因此,
X也可以通过这个钥匙来解密密文
上面这个场景就会引出一个新问题,这个问题被称为 “钥匙交付问题”,那怎么解决这个问题?
公开密钥加密
为了解决上面的 “钥匙交付问题”,我们这里引入一个新的方法 —— "公开密钥加密",下图是 “公开密钥加密” 的主要特点
- 用于加密的密钥被称为“公钥”,用于解密的密钥被称为“私钥”
- 跟 “对称密钥加密” 相比,公开密钥加密往往需要更多的时间用于加密和解密
我们来看看 “公开密钥加密” 的一整个过程
接收方 B 创建一个公钥和一个私钥,公钥被发送给 A
A使用从B收到的公钥加密数据,将密文发送给BB使用私钥解密从A接收到的密文,得到原始数据
在这个过程中
- 密文和公钥也可能被恶意第三方 X 截获
- 但是私钥是
B保存的,X无法获取到,自然没有办法解密密文 - 这样就很好的解决了 “钥匙交付问题”
公开密钥加密的问题
- 加密和解密都需要耗费时间,有一种叫 “混合加密” 的方法可以解决这个问题
- 公开密钥的可靠性
混合加密
混合密钥加密分为两个步骤
- 通过公开密钥加密传递密钥
- 通过速度更快的对称密钥加密方法传递数据
中间人攻击
为了更好地理解公开密钥加密的可靠性问题,我们回到传递公钥的场景
A 拿到的其实是 X 发送给他的伪造公钥,但是 A 无法察觉
最后,X 用他自己的密钥加密响应数据,并发送给 A,就这样,虽然 A、B 双方能顺利完成通信,但是恶意的第三方 X 能看到解密后的请求数据和响应数据,而 A、B 双方则毫不知情。
这种通过秘密替换公钥窃取数据的方法被称为“中间人攻击”,问题的根源在于 A 无法确认他们收到的公钥是否由 B 方创建。怎么避免中间人攻击呢?我们放到数字证书那节再探讨,接下来再讲解一点前置知识
消息鉴别码
消息鉴别码在英文中被称为 MAC,MAC 可以理解为密钥和密文组成的字符串的哈希值
消息鉴别码虽然可以解决伪造问题,但是仍然无法避免 否认 问题
数字签名
为了解决这个 否认 问题,我们接下来看看 “数字签名” 方法
数字证书
虽然上面的方法已经能避免 窃听、伪造、否认 等问题,但是现在还是没办法避免“中间人攻击”,因为我们还是没办法验证公钥的所有者,因此我们需要 “数字证书” 系统来验证公钥的所有者。
接下来,先看看数字证书申请的过程,我们将数字证书认证机构(Certificate Authority)我们称之为 CA
现在 B 已经申请到一个数字证书了,那么怎么使用数字证书来检验公钥 PB 是属于 B 呢
现在可以验证 PB 是属于 B 的,但是怎么验证 PC 是属于受信任的 CA 的呢
事实上,认证机构形成一个树形结构,高级别的权威机构为较低级别的机构创建证书,那就是说,如果要验证的话,就是一级一级向上认证,信任链条的最终是Root CA,他采用自签名,对他的签名是无条件的信任。
HTTPS
完全理解上面说的东西之后,就能够很容易理解 HTTPS,它采用的就是上面说的 “混合加密” + “数字证书” 两种技术,来保证整个通信过程的安全可靠。
HTTPS 做的事情其实就是在传输层跟应用层之间加了一层 SSL/TLS,用于对 TCP 传输内容的加密和解密
下图我们再看一下详细的工作流程
完全图解 HTTPS的更多相关文章
- 图解 HTTP, 图解 HTTPS, 图解 HTTP/2, 图解 HTTP/3, 图解 QUIC
图解 HTTP, 图解 HTTPS, 图解 HTTP/2, 图解 HTTP/3, 图解 QUIC HTTP https://en.wikipedia.org/wiki/Hypertext_Transf ...
- 图解HTTPS
看到一篇讲解HTTPS交互的文章,讲得很清楚,备忘一下 来自无网不剩的博客 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTP ...
- 图解HTTPS协议加密解密全过程
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...
- 白话图解HTTPS原理
[前言]最近看过几篇文章,内容是关于"全民HTTPS"的.为什么HTTPS,突然会受到如此多业内人士的青睐呢?HTTPS究竟是什么呢?它与HTTP又有怎样的区别呢? 带着这 ...
- 图解HTTPS建立过程
阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...
- 图解HTTPS协议
原文出处: leezhong的博客 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实 ...
- 图解 https 单向认证和双向认证!
来源: 一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明 ...
- 【HTTP】图解HTTPS
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...
- 网站使用https协议
了解https HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层.HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443. SSL ...
随机推荐
- Java使用枚举来消除if else(转载)
Java代码里经常出现多个if else会大大降低效率,我们可以使用枚举的方式来代替if else,示例代码如下: public enum Grade { A_10_90(90, 100, " ...
- springmvc 整合 netty-socketio
1 maven <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId ...
- ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明
说明 这一节说明一下基础篇APP源码里面MyMqttCilent.java这个文件的使用 新建工程 安装MQTT的jar包 implementation 'org.eclipse.paho:org.e ...
- Datagrip 2017.2 激活
解决方法 参考网址:https://jetbrains-server.ru/2017/03/31/datagrip-2016-2017-activation/page/2/ 亲测使用http://id ...
- java插入代码块
粘贴1: 当代码写到一定程度之后,就会发现很多代码都被重复地敲了N多遍,甚至毫不夸张地说:闭着眼睛都能敲出来.大量地敲这些重复地代码,除了锻炼敲键盘的速度,基本上没有其他益处,但是长期下来会浪费很多时 ...
- [SDOI2018]物理实验 set,扫描线,旋转坐标系
[SDOI2018]物理实验 set,扫描线,旋转坐标系 链接 loj 思路 先将导轨移到原点,然后旋转坐标系,参考博客. 然后分线段,每段的贡献(三角函数值)求出来,用自己喜欢的平衡树,我选set. ...
- 【LG2605】[ZJOI2010]基站选址
[LG2605][ZJOI2010]基站选址 题面 洛谷 题解 先考虑一下暴力怎么写,设\(f_{i,j}\)表示当前\(dp\)到\(i\),且强制选\(i\),目前共放置\(j\)个的方案数. 那 ...
- java_home not found in your enviroment 问题解决方法
java_home not found in your enviroment 错误原因有一下几点 1. JAVA_HOME系统环境没配置, JAVA_HOME环境变量配置方法: <1> 右 ...
- 热点Key问题的发现与解决
热点问题概述 产生原因 热点问题产生的原因大致有以下两种: 用户消费的数据远大于生产的数据(热卖商品.热点新闻.热点评论.明星直播). 在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的 ...
- ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)
“出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”.这是文档中的原话,也 ...