应用层协议(下)Https加密Http的秘密(含逻辑图解 简单易学 通俗易懂!)

本文主要是介绍应用层协议(下)Https加密Http的秘密(含逻辑图解 简单易学 通俗易懂!),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

绪论​
“如今我努力奔跑,不过是为了追上那个曾经被寄予厚望的自己 —— 约翰丶利文斯顿”,本章承接上章Http,没看过强烈建议看后再看本章,本章主要就是学习Https是干什么的并且去底层的学习Http的原理,将会讲到Https的加密、解密过程。
请添加图片描述
话不多说安全带系好,发车啦(建议电脑观看)。


Https协议

在这里插入图片描述

https也是一个应用层协议,是在http协议的基础上引入了一个加密层
常见的https其实就是加密式的http
http协议内容是按照文本的方式明文传输的,这就导致在传输过程中可能出现一些被篡改的情况,所以就需要将这些明文给进行加密防止数据泄露

加密、解密过程

  1. 加密:把明文(要传输的信息)进行一系列变换生成密文的方法
  2. 解密:把密文进行一系列变换还原成明文的方法
    秘钥:在解密过程中往往需要辅助进行这个过程的一个或者多个中间值

理解运营商、浏览器(客户端)、服务器的关系

关系如下图:
在这里插入图片描述
浏览器和运营商设备关系我们能理解成,当我们用手机给电脑使用热点来入网,手机就是运营商设备,电脑就是浏览器,电脑所要发送的信息都会经过手机(中间人)!

常见加密方式:

  1. 对称加密:加密和解密所用的秘钥是一样的,也称为单密钥加密。通过同一个密码加密解密。
    常⻅对称加密算法(了解):
    1. DES
    2. 3DES

    3. AES
    4. TDEA
    5. Blowfish
    5. RC2等

特点:算法公开,计算量小,加密速度快,加密效率高

  1. ⾮对称加密:需要两个秘钥进行加密和解密,这两个秘钥是公开秘钥(公钥)和私有秘钥(私钥)
    使用方法:
    1. 公钥加密只能私钥解密
    2. 私钥加密只能公钥解密

(建议先记忆后面会写具体使用就会更好的理解!)

常见的⾮对称加密:
1. RSA
2. DSA
3. ECDSA

特点:算法强度复杂、公钥私钥是配对的,运算速度非常慢、算法复杂

数据摘要、数据指纹

利用单向散列(Hash函数)对信息进行运算,生成一串固定长度的数字摘要
在这里插入图片描述
常见方法:

  1. MD5
  2. SHA1
  3. SHA256
  4. SHA512等

算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要可能相同,但是概率⾮常低)
数据摘要其实就等于数据指纹(一个概念)

单向散列的应用场景:

  1. 对用户注册的账号的密码进行加密存进MySQL数据库(因为密码直接明文存在数据库里面其实也并不安全,而散列值只能单向加密(无法通过散列值还原数据),所以散列值即使泄密了无法返回去解密也无法被还原)

  2. 百度网盘,秒传功能,其实就是对于百度来说他们在存储时不会存储多份相同的数据。百度会把所有上传的数据生成散列值,然后查看散列值是否相同,若相同则直接形成一个链接直接链接上即可,就不需要在服务器内存储多份相同的数据。

数据指纹用于:

  1. 对比两个文件是否是同一个
  2. 判断是否被篡改过

数字签名:经过加密的数据摘要

关于https的加密发展

设计一下https,提出方案(若不想看直接跳方案5)
下面将会不断提出方案通过不断提出然后修正,最终得到最好的方案

方案1:
只使用对称加密,是不行的因为无法让服务器和客户端直接通过网络用上同一个秘钥

方案2:
只使用一个非对称秘钥:服务端通过公钥加密发给客户端,客户端使用公钥解密,服务端使用私钥解密。

会导致数据被盗因为:公钥是公开的,当S服务器发送消息(数据)给C客户端时可能会被中间人给截胡解密从而导致数据的泄露
在这里插入图片描述

方案3:
双方同时使用非对称秘钥
能实现加密但效率低(有一定的安全问题:穷举)
在这里插入图片描述

方案4
非对称加密 + 对称加密:服务器使用非对称生成公钥和秘钥,并且把S公钥给到客户,客户使用对称生成对称秘钥C。
再通过S的公钥把密钥C进行加密给到服务器,这样就只有有S’秘钥的服务器才能解密得到C,从而服务器也就得到对称秘钥C,就能进行对称加密。

在这里插入图片描述
但仍然有一定漏洞:中间人将服务器传来给客户端的公钥S,截胡然后把中间人生成的公钥M给到客户(客户并不知道自己收到的公钥其实并不是服务器的)当客户再把密文传来时,就能通过M’解开得到对称秘钥C,然后再还原真正要传给服务器的密文(C + S),这样中间人就能再中间不断的获取服务器和客户相互之间的数据!

在这里插入图片描述
方案4的核心问题在哪里?
client无法判断收到的公钥S的合法性!

方案5:
所以方案5就是在这个基础上优化第四种方案

引入证书

理解类似于我们进网站时见到的:
在这里插入图片描述
CA认证(相当于权威机构认证)
服务端在使用https前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息,公钥信息等。
在这里插入图片描述

服务器先形成自己的公钥和私钥,将域名/申请者/公钥打包生成请求文件(.csr),给到CA机构进行审核信息,审核成功后签发证书(证书内的公钥就是服务器给client的公钥)

证书(数字签名的数据)的使用过程:
在这里插入图片描述
证书 = 企业明文数据 + 签名

  1. 将数据和签名(把数据形成的散列经过加密)合并成数字签名的数据
  2. 在验证时候把它们分开来再查看散列值是否一样就能确定数据是否被更

其中生成的签名是通过CA(签名者)的私钥加密生成的,中间人拿着个签名没办法,这样我们就解决了服务器的公钥被中间人替换的问题!!!

client进行如下操作:

  1. client得到了:证书 + 域名 + 公钥 + CA签名(CA私钥)
  2. 甄别
    1. 若数据被修改了它的散列值也将对不上签名解密的散列值
    2. 若是改签名,因为浏览器只会用CA的公钥解密,若是中间人写的签名是无法被解密的。
    3. 数据和签名全改了,也就表示着得用真正的证书,而真证书只能由CA签发,这样也就暴露了,客户端也能根据假证书的域名和所要进入的域名区别来识别
    4. 所以只要没出现上述问题就表示数据正常
  3. 从证书中提取server公钥
  4. 最后走方案4即可加密传送数据!

现在https所用的加密:
浏览器/client内置CA权威机构的公钥 + 证书(存的服务器公钥) + 非对称 + 对称 (也就等于方案5)
在这里插入图片描述
附:

  1. 可以使⽤在线⽣成CSR和私钥:https://myssl.com/csr_create.html
  2. 在我们浏览器中也会提前内置证书:
    在这里插入图片描述
  3. 内部就会有存在明文信息(公钥等信息)
    在这里插入图片描述

本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量计算机网络细致内容,早关注不迷路。

这篇关于应用层协议(下)Https加密Http的秘密(含逻辑图解 简单易学 通俗易懂!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122943

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而