• https与http的区别以及https加密原理

    • 一.什么是HTTPS
    • 二.为什么要用HTTPS替代HTTP
    • 三.HTTPS 与 HTTP 的区别
    • 四.HTTPS如何解决HTTP上述问题?
      • 1. 对称加密方案
      • 2. 非对称加密方案
      • 3. 改良的非对称加密方案
      • 4. 非对称加密+对称加密方案
      • 5. 中间人攻击
      • 6. 如何证明公钥就是要访问的网站的?
      • 7. 如何防止数字证书被篡改?(数字签名)
      • 8. 为什么制作数字签名时需要hash一次?

https与http的区别以及https加密原理

HTTPS 的加密机制,作为网络通信的基础知识,之前东看看,西看看,一直没有研究透彻,最近在知乎上看到了一位小哥的文章,通俗易懂,以问题的形式逐步展开,不断抛出问题,解决问题,原文见引用1,笔者只记录了其中比较重要的知识点,详情可见原文。

本篇文章主要介绍为啥 HTTPS 会比 HTTP 安全,二者之间的区别,以及HTTPS背后的加密原理是什么?

动动发财小手,点赞 + 收藏不迷路。文章较长,建议没事多看几遍,加深理解。

一.什么是HTTPS

HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。

HTTPS主要作用是:

  • 1.对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;

  • 2.对网站服务器进行真实身份认证。

二.为什么要用HTTPS替代HTTP

在HTTP协议中有可能存在信息窃取或身份伪装等安全问题,
使用HTTPS通信机制可以有效地防止这些问题。

http存在的问题

  • 1.通信使用明文(不加密),内容可能被窃听
  • 2.无法证明报文的完整性,报文数据有可能会被篡改
  • 3.不验证通信方的身份,因此有可能遭遇伪装

三.HTTPS 与 HTTP 的区别

  1. HTTP 是明文传输协议,HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,HTTPS 协议安全
  2. HTTPS 相比 HTTP 更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引 HTTPS 网页
  3. HTTPS 需要用到SSL证书,而 HTTP 不用
  4. HTTPS 标准端口443,HTTP 标准端口80
  5. HTTPS 基于传输层,HTTP 基于应用层
  6. HTTPS 在浏览器显示绿色安全锁,HTTP 没有显示

四.HTTPS如何解决HTTP上述问题?

先简单介绍一下两种加密算法:对称加密、非对称加密

对称加密:加密和解密使用的是同一个秘钥。

非对称加密:与对称加密不同,它有两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

注意:对称加密加密速度快,非对称加密速度慢,后面会用到这个知识点。

1. 对称加密方案

首先想到的是对称加密的方案,如果浏览器和服务器持有同一个秘钥,并且秘钥没有泄露,那么浏览器和服务器之间的通信就是安全的。但这是理想情况,通常秘钥需要在网络中传输,才可以让双方都知晓。秘钥采用明文传输,如果被别人拦截到,那么他就可以用这个秘钥解开双方传输的内容了。

2. 非对称加密方案

鉴于非对称加密的机制,我们可能会有这种思路:服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,这条数据的安全似乎可以保障了!因为只有服务器有相应的私钥能解开公钥加密的数据。

然而反过来由服务器到浏览器的这条路怎么保障安全?如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。所以目前似乎只能保证由浏览器向服务器传输数据的安全性(其实仍有漏洞,下文会说),那由单个方向传输是安全的这点你能想到什么解决方案吗?

3. 改良的非对称加密方案

我们已经理解通过一组公钥私钥,可以保证单个方向传输的安全性,那用两组公钥私钥,是否就能保证双向传输都安全了?请看下面的过程:

  1. 某网站服务器拥有公钥A与对应的私钥A’;浏览器拥有公钥B与对应的私钥B’。
  2. 浏览器把公钥B明文传输给服务器。
  3. 服务器把公钥A明文给传输浏览器。
  4. 之后浏览器向服务器传输的内容都用公钥A加密,服务器收到后用私钥A’解密。由于只有服务器拥有私钥A’,所以能保证这条数据的安全。
  5. 同理,服务器向浏览器传输的内容都用公钥B加密,浏览器收到后用私钥B’解密。同上也可以保证这条数据的安全。

的确可以!抛开这里面仍有的漏洞不谈(下文会讲),HTTPS的加密却没使用这种方案,为什么?很重要的原因是非对称加密算法非常耗时,而对称加密快很多。那我们能不能运用非对称加密的特性解决前面提到的对称加密公钥容易别拦截的问题呢?

4. 非对称加密+对称加密方案

既然非对称加密耗时,那非对称加密+对称加密结合可以吗?而且得尽量减少非对称加密的次数。

当然是可以的,且非对称加密、解密各只需用一次即可。
请看一下这个过程:

  1. 某网站拥有用于非对称加密的公钥A、私钥A’。
  2. 浏览器向网站服务器发起请求,服务器把公钥A明文传输给浏览器。
  3. 浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
  4. 服务器拿到后用私钥A’解密得到密钥X。
  5. 这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过密钥X加密解密即可。

完美!HTTPS基本就是采用了这种方案。完美?还是有漏洞的。

5. 中间人攻击

假如在网站服务器和浏览器之间进行数据传输时,有一个中间人劫持到了数据,看似中间人在拿到公钥A没有什么作用,因为他没有私钥A’,无法解密拿到流浪器的对称加密秘钥X,其实中间人在没有拿到A’的情况下,就可以与网站服务器进行通信。中间人的骚操作如下:

  1. 某网站服务器有用于非对称加密的公钥A、私钥A’。
  2. 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  3. 中间人劫持到公钥A,然后他也生成一份公钥B以及对应的私钥B’,将数据包中的公钥A替换成自己的公钥B。
  4. 浏览器生成一个用于对称加密的密钥X,用公钥B(浏览器无法得知公钥被替换了)加密后传给服务器。
  5. 中间人劫持后用私钥B’解密得到密钥X,再用公钥A加密后传给服务器。
  6. 服务器拿到后用私钥A’解密得到密钥X。

这样在双方都不会发现异常的情况下,中间人通过一套“狸猫换太子”的操作,掉包了服务器传来的公钥,进而得到了密钥X。根本原因是浏览器无法确认收到的公钥是不是网站自己的,因为公钥本身是明文传输的。

6. 如何证明公钥就是要访问的网站的?

中间人攻击的根本问题,在于浏览器无法确保拿到的公钥就是网站的。

那么 HTTPS 是如何来确保浏览器拿到的公钥一定就是网站的呢?答案就是证书颁发机构,假如从机构获取的信息都是可信,能够证明公钥就是对应网站的公钥,那么通信就是安全的。

证书颁发机构就是 CA(Certificate Authority)机构,网站在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。而这里又有一个显而易见的问题,“证书本身的传输过程中,如何防止被篡改”?即如何证明证书本身的真实性?身份证运用了一些防伪技术,而数字证书怎么防伪呢?

7. 如何防止数字证书被篡改?(数字签名)

数字签名制作过程

  1. CA 机构拥有非堆成加密的私钥和公钥
  2. CA 机构对证书的明文 T 进行hash
  3. 使用私钥对 hash 后的值进行加密,得到数字签名S

明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了。

浏览器验证过程

  1. 浏览器拿到证书,得到明文 T,签名 S
  2. 用 CA 机构的公钥对 S 解密,得到 S’
  3. 用证书里指明的 hash 算法对明文 T 进行 hash 得到 T’
  4. 比较 T’ 是否等于 S’,相等,则证书没有被篡改

8. 为什么制作数字签名时需要hash一次?

最显然的是性能问题,前面我们已经说了非对称加密效率较差,证书信息一般较长,加密比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加解密就快很多。

当然也有安全上的原因,这部分内容相对深一些,感兴趣的可以看这篇解答:
crypto.stackexchange.com/a/12780

引用:
1.https://zhuanlan.zhihu.com/p/43789231
2.https://blog.csdn.net/qianyu6200430/article/details/101443883
3.https://zhuanlan.zhihu.com/p/100657391

https与http的区别以及https加密原理相关推荐

  1. 详解http和https的作用与区别

    PS: https就是http和TCP之间有一层SSL层,这一层的实际作用是防止钓鱼和加密.防止钓鱼通过网站的证书,网站必须有CA证书,证书类似于一个解密的签名.另外是加密,加密需要一个密钥交换算法, ...

  2. 4.HTTPS与HTTP的区别

    HTTP的弊端 1)通过明文(不加密)传输,内容可能会遭到窃听. 2)不验证通信方的身份,因此有可能遭到伪装(拒绝服务型攻击(海量请求下的DOS攻击)). 3)无法验证报文的完整性,所以有可能已遭篡改 ...

  3. jmeter HTTPS和HTTP的区别

    一.HTTPS和HTTP的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务 ...

  4. M面试题-HTTPS和HTTP的区别

    转载自 : https://www.cnblogs.com/wqhwe/p/5407468.html 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送 ...

  5. http与https的作用与区别

    HTTP 属于超文本传输协议,用来在 Internet 上传送超文本,而 HTTPS 为安全超文本传输协议,在 HTTPS 基础上拥有更强的安全性,简单来说 HTTPS 是 HTTP 的安全版,是使用 ...

  6. (二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!

    引言 在上篇文章中,已经讲明了当下计算机网络的基础知识,其中对网络体系结构.分层模型.TCP/IP协议簇.....等多方面内容进行了阐述,而在本章会分析到网络知识中另外两个大名鼎鼎的协议:HTTP/H ...

  7. http和https协议有什么区别

    1.https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用.(原来网易官网是http,而网易邮箱是https.) 2.htt ...

  8. 你是否了解HTTPS的加密原理?(面试常问)

    梦梦前段时间面试,以及工作之后负责的模块多多少少都会涉及到一些网络协议的知识,今天就抽出时间整理了其中两个常见的协议:HTTP和HTTPS的区别. 什么是网络协议? HTTP和HTTPS的基本概念 H ...

  9. Https 加密原理分析

    众所周知,HTTP 协议通过明文传输,是不安全的.于是,就在 HTTP 协议的基础上,进行了数据加密,也就诞生了 HTTPS 协议.注意,HTTPS 并不是一个新的协议,它只不过是在 HTTP 的基础 ...

最新文章

  1. Java 算法-异或校验和
  2. Oracle Database Appliance ODA开箱视频
  3. AlertDialog 点击空白处、返回按钮 行为
  4. Codeforces Round #547 (Div. 3) D
  5. getResource(String name)用法及源码分析
  6. ztree 标准得json数据格式_酷站推荐 - json-c.github.io/json-c - json-c API
  7. 如何在电脑上搭建一个私服,实现maven项目的上传和下载?
  8. 阶段3 3.SpringMVC·_07.SSM整合案例_01.ssm整合说明
  9. vue 为全局变量赋值_在vue项目中 如何定义全局变量 全局函数
  10. 使用AT指令与BC26进行socket通信
  11. yolov3训练步骤
  12. 如何低成本做好网络营销
  13. Unity中制作图片字体
  14. ubuntu20.04中安装划词翻译_支持语音录入翻译的小爱同学鼠标让智能设备控制一手掌握...
  15. Gentoo虚拟机安装教程
  16. 将小写字母转换成大写字母C/C++(指针)
  17. 苹果邮箱怎么登录qq邮箱_怎么登陆邮箱?公司mail邮箱在哪登录?
  18. 基于深度学习的目标检测算法综述
  19. c语言 注册商标标志,什么是标识符?
  20. vue-request发起网络数据请求

热门文章

  1. Mac-iTerm2固定标签名字
  2. 电子信息工程就业方向及薪资标准
  3. C语言100题练习计划 43——判断上三角矩阵
  4. 品赏第一行“Android代码“---Hello World
  5. 行测-常识积累(4)
  6. MATLAB中的step()函数
  7. 可用的rtsp、rtmp、http网络直播地址
  8. 项目模板下载推荐网站
  9. python stmp 定时发送邮件
  10. SparkSQL 总结