https传输流程(加密方式、证书、传输安全)
http的缺点
http的数据是明文传输
如果用明文传输 很容易被第三方获取到传输的数据 因此我们一般要在网络传输过程中对数据进行加密
常见的加密方式
对称加密
秘钥key 待加密数据data
a和b是两个主机,它们都有秘钥key ,
a传输data会先用key进行加密,生成密文DATA,
b拿到DATA后再用key解密,获取到data
问题: key可能被第三方获取,从而得到原数据data
非对称加密
公钥publick_key 私钥private_key 可以公钥加密,私钥解密,也可以私钥加密,公钥解密
a第一次请求,b给a返回公钥,
a第二次请求,给b传输用公钥加密后的密文DATA,
b收到后 用私钥解密DATA,拿到原数据data
由于私钥只有b才拥有,因此第三方无法获取私钥,自然无法对加密数据进行解密
问题:如果b向a发送数据的话 如果用公钥加密 但a没有私钥 所以无法解密 ;如果用私钥加密,a用公钥解密,但是第三方也能拿到公钥。
既然都不行,那该怎么解决呢?
对称加密+非对称加密
- 先使用非对称加密 得到公钥 再利用公钥生成一个传输秘钥 进行双方的数据传输
- client第一次请求,server给client返回公钥,
- client拿到公钥,再生成一个随机字符串,使用公钥对这个字符串进行加密,传给server
- server收到后 用私钥解密出字符串,这个字符串用来作为之后双方进行数据传输的对称秘钥
问题: 中间人攻击
在client 向server请求公钥时 中间人拦截请求 并向client发送自己的公钥 因此中间人就可以在之后的传输过程中查看和篡改数据
中间人攻击的产生原因以及如何避免?
产生原因: 无法确认server的身份
需要有CA(证书颁发机构)对网站身份进行认证
申请证书
服务端将域名和公钥传给CA CA有自己的公钥和私钥,然后给服务端下发证书。
证书的内容主要有: 域名, 证书颁发机构相关信息, 用CA私钥加密过后的服务器公钥, 用CA私钥加密过后证书签名。
服务器会用CA公钥解密,获取证书签名 ,
证书签名是由服务器域名 + CA公钥 + 服务器公钥,通过hash算法加密而成的一段信息
证书签名用来验证是否被篡改
服务器收到证书,会用域名、 CA公钥、 自己公钥生成一个签名 检查该签名是否和证书的签名一致 一致则说明没有被篡改
https传输流程
- client向server发起请求 ,server先返回一个证书
- 由于client的操作系统中存有ca的公钥 因此可以对证书的密文进行解密,获取到服务器的公钥和证书签名。
- client验证证书签名 也就是用证书上的域名 + CA公钥 + 服务器公钥用hash算法进行加密 把加密结果和证书签名进行对比 若结果一致 就证明证书签名没有被篡改 没有被篡改的话 client就可以生成一个随机字符串
- 随机字符串用服务器公钥进行加密,传给server
- server收到后解密拿到随机字符串,作为之后双方传输数据的公钥
如果client获取到的证书是没有认证的 网页就会提示证书是不安全的
https传输过程中能否被篡改?
1.中间人能否篡改证书的公钥和证书签名?
由于每个CA公钥是公开的,所以中间人也有,能够揭秘获取到服务器公钥和证书签名,中间人如果想修改这两个数据,则需要用中间人自己的私钥进行加密,但是client会用CA公钥解密,自然是解不开的,所以无法篡改。
2.中间人能否篡改证书的域名?
验证签名的过程会出错,因为client需要将域名、 CA公钥、 自己公钥用hash算法生成一个签名,再和证书上的签名对比,此时发现不一致,则说明域名、 CA公钥、 自己公钥被篡改过了。
3.中间人能否在client请求证书时就拦截,并返回一个中间人自己的证书?
其实是可以的,但需要得到client的同意,信任此证书才行。这也是抓包工具可以截取到https传输过程中数据的原因。但也会有第三方利用这一点,出现个弹窗诱导用户点击,就可以给client植入“木马病毒”,这样就能获取和篡改client和server的数据。
大家如果对木马感兴趣的话,之后会准备下知识点,详细介绍一下~~
https传输流程(加密方式、证书、传输安全)的更多相关文章
- 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式
# 原创,转载请留言联系 为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性.例如小明发一封表白邮件给小红,他总不希望给别人看见吧.而各种各样的技术就是为了 ...
- 《Apache数据传输加密、证书的制作》——涉及HTTPS协议
首先了解http和https: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议. HTTPS和HTTP的区别: http是超文本传输协议,信息是明 ...
- 常见https,SSH协议和MD5加密方式分析
前言 https,SSH协议和MD5加密是前端可能会接触到的加密,所以我就将他们进行了一个归纳. 1.https 1.1原理 A.就是在http加入SSL层,是http安全的基础;B.htts协议是在 ...
- 在SuperSocket中启用TLS/SSL传输层加密
关键字: TLS, SSL, 传输层加密, 传输层安全, 证书使用, X509Certificate SuperSocket 支持传输层加密(TLS/SSL) SuperSocket 有自动的对TLS ...
- PHP如何支持CURL字符串证书传输
背景 最近在对接微信支付的时候,需要在退款处用到证书,由于我们是SAAS平台,要支持多方多渠道支付,如果把所有证书文件保存在应用服务器会受到SLB的影响,会导致某台机器文件不同步而阻碍退款流程,但把文 ...
- 对加密方式(公钥私钥)的形象理解(以http和https为例)
https其实就是建构在SSL/TLS之上的 http协议,所以要比较https比http多用多少服务器资源,主要看SSL/TLS本身消耗多少服务器资源. http使用TCP 三次握手建立连接,客户端 ...
- php 加密 解密 密码传输
php 加密 解密 密码传输 <?php /* * * 使用按位异或运算 加密 * $str 明文 * $salt 盐 * */ public static function xor_encry ...
- Ubunut18.04与Windows传输文件的方式
ubunut18.04与Windows传输文件的方式 开发环境:ubuntu18.04; 虚拟机:virtual box; 操作系统:Win10_64bits/专业版 在以前使用的ubuntu12.0 ...
- Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程
BOOTP-TFTP-FTP 目录 文件传输流程 服务器建立过程 客户端建立过程 1 文件传输流程 / File Transfer Flow 利用BOOTP,TFTP,FTP三种传输协议,建立起客户端 ...
- UDP方式的传输
UDP 部分内容需要查文档学习,我们需要了解下面的两个类:java.net.DatagramSocket和java.net.DatagramPacket java.net.DatagramSocket ...
随机推荐
- KVM虚拟机迁移至VMWare ESXi
需求 由于服务器迁移,为维护方便,将统一使用vmware 平台管理虚拟机,因此需将kvm 虚拟机统一迁至vmware kvm 磁盘镜像转换 查看虚拟机 # virsh list --all Id Na ...
- Python 封装cmd 执行命令
1.利用shell中执行成功返回0 失败非零 封装成函数 # coding: utf-8 from subprocess import Popen, PIPE, STDOUT import sys ...
- HCIA-ICT实战基础08-访问控制列表ACL原理与配置
HCIA-ICT实战基础-访问控制列表ACL原理与配置 目录 ACL技术概述 ACL的基本概念及其工作原理 ACL的基础配置及应用 ACL技术概述 技术背景: 需要一个工具实现流量过滤 ACL是由一系 ...
- OpenEuler 中C与汇编的混合编程
2.5.1用汇编代码编程 将C代码编译成汇编代码 C代码: /**********a.c file********/ #include <stdio.h> extern int B(); ...
- nodejs redis执行lua脚本
const Redis = require("ioredis"); const redis = new Redis({ port: 6300, // Redis port host ...
- vc++生成随机数
在VC++提供的函数为rand(),返回一个0至65535之间的随机数,若想产生0至MAX_NUM之间的随机数,可用rand()%MAX_NUM,即产生小于MAX_NUM的随机数 for (int i ...
- 【python_PAT_乙类】1013_数素数 ,Python运行超时解决方案
题目: 令 Pi 表示第 i 个素数.现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数. 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔. 输出格 ...
- opencv对鱼眼图像畸变矫正
import numpy as np ''' #T_cam_imu body_T_cam0: !!opencv-matrix rows: 4 cols: 4 dt: d data: [0.003489 ...
- 学习使用数据库SQLServer (一)
小记一下学习使用数据库时遇到的问题 1.建表时未设置主键约束名,此时删表主键会遇到困难,不能简单使用 ALTER TABLE NAME DROP CONSTRAINT 约束名: 而是要先找到数据表中主 ...
- Java中String相关知识
String 1.String概述 String代表字符串,Java程序中所有的字符串文字(例如'abc")都被实现为此类的实例,也就是说,Java中所有的双引号字符串都是String类的对 ...