HTTPS 加密原理探究
由于之前项目中IOS系统建议将http协议换成https协议所以查看相关资料在此记录 HTTPS 通讯过程的基本原理
问:Https是什么?
答:
HTTP 协议定义了一套规范,让客户端或浏览器可以和服务器正常通信,完成数据传输
但是,HTTP 使用明文传输,你输入的账户密码等重要信息易被中间人窃听,从而造成数据泄露,所以说 HTTP 是不安全的,为了解决安全传输的问题,人们发明了 HTTPS,即 HTTP + Secure
问:为什么 HTTPS 是安全的?
答:
只要把传输的数据加密,那么通信就是安全的,前提是除通信双方外,任何第三方无法解密
问:HTTPS 是怎么实现安全通信的?
答:
使用对称加密技术,简单而言,通信双方各有一把相同的钥匙(所谓对称),客户端把数据加密锁起来后,传送给服务器,服务器再用钥匙解密。同理,服务器加密后传输给客户端的数据,客户端也可以用钥匙解密,此处有一个新问题怎样在通信之前,给双方分配两把一样的钥匙呢?有一个简单的解决方案是:客户端在每次请求通信之前,先和服务器协商,通过某种办法,产生只有双方知道的对称密钥
这个过程就是所谓:密钥交换(Key Exchange),密钥交换算法有很多,常见的有
- Deffie-Hellman 密钥交换算法
- RSA 密钥交换算法
在此,以RSA算法为例进行介绍
RSA 密钥交换算法需要客户端向服务器提供一个 Pre-Master-Key,然后通信双方再生成 Master-Key,最后根据 Master-Key 产生后续一系列所需要的密钥,包括传输数据的时候使用的对称密钥。那么客户端怎么把 Pre-Master-Key 告诉服务器呢?
在此引入一种新的加密技术:非对称加密(服务器可以生成一对不同的密钥,一把私自保存,称为私钥;一把向所有人公开,称为公钥
这对密钥有这样的性质:公钥加密后的数据只有私钥能解密,私钥加密后的数据只有公钥能解密)
具体的交互过程:
- 客户端向服务器索取公钥 PublicKey;
- 服务器将公钥发给客户端(这里没有保密需求,因为公钥是向所有人公开的);
- 客户端使用服务器的公钥 PublicKey 把 Pre-Master-Key 加密成密文,传送给服务器;
- 服务器用私钥 PrivateKey 解密密文,获取到客户端发送的 Pre-Master-Key;
在此又会引发新的问题,由于互联网是公开的,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改(所谓中间人攻击 Man-in-the-middle attack,缩写:MITM),因为中间人也可以生成一对非对称密钥,它会截获服务器发送的公钥,然后把它自己的公钥 MiddleMan-PublicKey 发送给客户端,进行欺骗。
为了解决这个问题,服务器需要到权威机构 (Authority) 办一张证书 Certificate,上面记载了服务器的域名、公钥、所属单位,还有签发机关、有效期等当客户端收到服务器发过来的证书后,只要证书不是伪造的,那么上面记载的公钥肯定也就是真的!
不过,这里又有个新问题:怎么证明证书不是伪造的?
只要服务器发送的证书上有权威机构 Authority 的签名,就可以确信证书是颁发给服务器的,而不是谁伪造的
如此看来
HTTPS 通信过程已经很明朗了:
- 操作系统/浏览器 自带了 CA 根证书;
- 客户端因此可以验证服务器发送的证书真实性,从而获取到服务器的公钥;
- 有了服务器的公钥,客户端就可以把 Pre-Master-Key 传送给服务器;
- 服务器获取到 Pre-Master-Key 后,通过后续产生的对称密钥,就可以和客户端加密通信了。
HTTPS 加密原理探究的更多相关文章
- HTTPS加密原理(转)
Header HTTP.HTTPS在我们日常开发中是经常会接触到的. 我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议:使用浏览器打开网页, ...
- HTTPS加密原理与过程
HTTPS加密原理与过程 HTTP 超文本传输协议一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡 ...
- HTTPS加密原理
http(超文本传输协议) 一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 优点: 传输速度快 ...
- https 加密原理
转载于 https://www.cnblogs.com/imteck4713/p/12016313.html 补充: <图解HTTP> 1.引言 随着互联网安全意识的普遍提高,对安全要求稍 ...
- 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等
1.引言 HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其 ...
- HTTPS加密通信原理及数字证书系统
https加密通信原理: 公钥私钥成对,公钥公之于众,私钥只有自己知道. 用公钥加密的信息只能由与之相对应的私钥解密. 甲给乙发送数据时,甲先用乙的公钥加密这段数据,再用自己的私钥对这段数据的特征数据 ...
- 理解 HTTPS 工作原理(公钥、私钥、签名、数字证书、加密、认证)(转)
本文摘录参考: 细说 CA 和证书(主要讲解 CA 的使用) 数字签名是什么?(简单理解原理) 深入浅出 HTTPS 工作原理(深入理解原理) HTTP 协议由于是明文传送,所以存在三大风险: 1.被 ...
- HTTPS工作原理
HTTPS是什么 HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,及以安全为目标的HTTP通道,简单说就是HTTP的安全版本. ...
- HTTPS实现原理
HTTPS实现原理 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版 ...
随机推荐
- 回调函数 和 promise对象,及封装API接口
1.回调函数:https://blog.csdn.net/baidu_32262373/article/details/54969696 注意:回调函数不一定需要用到 return.如果浏览器支持Pr ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
- JS 多个条件判断
// 多个条件判断 // 对象序列(Object) 推荐使用这一种 var obj = {'CJ':'成交', 'WCJ':'未成交'}; if (key in obj) { // TODO } // ...
- HDU 1875 畅通工程再续 (Prim)
题目链接:HDU 1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现 ...
- 卷积实现 python
import sys h, w = input().strip().split() h = int(h) w = int(w) img = [] for i in range(h): line = s ...
- Django框架(二十九)—— 跨域问题
目录 跨域问题 一.同源策略 二.CORS(跨域资源共享) 三.CORS两种请求(简单请求与非简单请求) 1.简单请求(一次请求) 2.非简单请求(两次请求) 四.CORS在Django中的应用 1. ...
- python- 属性 静态方法,类方法
一,面向对象结构与成员 1,1 面向对象结构分析: 那么每个大区域又可以分为多个小部分: class A: company_name = '老男孩教育' # 静态变量(静态字段) __iphone = ...
- docker--build base image
通过dockerfile build一个base image,在上面运行一个c程序 首先 1.创建一个目录. 2.然后创建一个c写的小程序,并且gcc编译好. 3.创建一个Dockerfile FRO ...
- im开发总结:netty的使用
最近公司在做一个im群聊的开发,技术使用得非常多,各种代码封装得也是十分优美,使用到了netty,zookeeper,redis,线程池·,mongdb,lua,等系列的技术 netty是对nio的一 ...
- ollvm 使用——“Cannot open /dev/random”错误的解决方法
找到 \obfuscator-llvm-4.0\lib\Transforms\Obfuscation\CryptoUtils.cpp 这个文件, 新增两个头文件 #include <window ...