当前位置: 首页 > article >正文

网络原理(二)—— https

https 简介

https 也是一个应用层协议,他是由 http 和 SSL 组成的(在 http 的基础上进行加密,把原本http 的明文传输变为了密文传输),简称为 https。

加密的方式大体分为两大类,分别是对称加密和非对称加密。

对称加密

对称加密就是只生成一个密钥,这个密钥既是用来加密,也是用来解密的。

大致流程如下:
首先客户端生成一个密钥,然后通过网络传输发送给服务器,服务器先保存起来,之后两者之间传输的数据均由这个密钥进行加密或者解密。

在这里插入图片描述

非对称加密

由于对称传输使用的密钥是直接公开在网路中的,如果此时有一个路由器被黑客劫持,那么就可能会被黑客篡改信息,造成不良的影响,如下图:

在这里插入图片描述
因此如果密钥只用一个并且是公开传输,其实很不安全,这时候引入非对称传输。

非对称传输使用两个密钥,一个是公钥,另一个是私钥,公钥就是和上面的对称传输的密钥类似,是公开出去的,而私钥是自己保存的,不对外公开的。

公钥既可以用来解密,也可以用来加密,私钥也是,但是公钥和私钥两者只能做其中一件,例如,如果使用公钥来加密,那私钥就是用来解密的,如果私钥是用来加密,那公钥就是用来解密的。

公钥和私钥由服务器生成,服务器会把公钥公开出去,私钥会自己保存。

在这里插入图片描述

由于非对称加密消耗的算力比较大,所以一般我们使用非对称加密的是对称加密产生的密钥,不涉及庞大的业务数据。
对称加密则是针对业务数据加密的,只要非对称加密安全,就能保证对称加密的密钥不会泄漏,也就保证了此次会话的安全性。

中间人攻击

非对称加密也不一定安全,黑客可以利用设备伪装成服务器,给客户端发送假冒的公钥,如下图所示:
在这里插入图片描述
这就是中间人攻击

数字证书

为了避免发生中间人攻击,我们需要验证从服务器获得公钥是不是来自服务器的。

在服务器使用https 之前,会像CA机构进行权威认证,申请一份数字证书。

服务器把证书传输给浏览器,浏览器从证书里获取公钥,证书就如身份证,证明服务端公钥的权威性

数字证书的制作:
首先CA机构会使用非对称加密算法生成公钥和私钥,使用私钥来对数字证书进行加密,数字证书包含服务器的域名、公钥、数字签名、证书所有者、证书有效日期等等,通过算法把这些数据进行加密,客户端通过公钥进行解密验证,只要出现错误就会弹出警告这个网站不安全。

首先公钥的传输不是通过网络传输的,而是在电脑安装系统的时候就会把公钥一同保存到电脑里,这样黑客就无法进行中间人攻击伪造假证书。

有了数字证书之后,服务器和客户端之间的通信如下图所示:
在这里插入图片描述
在对称加密基础上引入非对称加密,在非对称加密的基础上又引入了数字证书,这样就保证了我们的数据传输的安全性。


理解数字签名:
数字签名本质上就是校验和,首先对一串数据进行哈希函数运算获得散列值,然后使用CA自己的私钥进行加密散列值,然后这串原始数据和加密过的散列值会一起存放在数字证书里,客户端使用CA的公钥对散列值进行解密获得校验和1,对原始的数据使用相同的散列函数运算得到校验和2,如果这两个校验和是一致的就说明签名是合法有效的。


客户端验证数字证书的步骤:
首先判断证书是否过期
其次判断证书的发布机构是否可以信任(操作系统中已内置的受信任的证书发布机构)
最后验证证书是否被篡改:从系统获取该证书机构的公钥,对签名进行解密获得校验和1,然后计算整个证书的hash值,得到校验和2,判断两个校验和是否相等。相等则说明证书没有被篡改过。


为什么黑客篡改不了数字签名,因为一旦篡改,里面的校验和也要跟着改,黑客没有CA的私钥,无法进行正确的加密,这样客户端使用公钥解密就会发现两个校验和对不上。


http://www.kler.cn/a/501112.html

相关文章:

  • 模拟SpringIOCAOP
  • HTML5 语义元素:网页构建的新时代
  • “深入浅出”系列之C++:(5)STL标准模板库详解
  • neo4j 安装 (提供镜像下载方式
  • golang常用标准库
  • Java高频面试之SE-11
  • 使用 Python 实现自动化办公(邮件、Excel)
  • 支持向量机算法详解:从理论到实践
  • Redis 源码分析-内部数据结构 dict
  • acwing_5721_化学方程式配平
  • 预编译SQL
  • unity下载newtonsoft-json
  • Spring Boot性能提升的核武器,速度提升500%!
  • 【微服务】面试题 6、分布式事务
  • Agentless:OpenAI 采用的非代理框架
  • Postman接口测试基本操作
  • Linux常见命令总结
  • 循环神经网络(RNN):从基础到未来的应用
  • 美创科技获数字安全产业贡献奖
  • CSS语言的语法糖
  • 【软考】软件设计师
  • RV1126+FFMPEG推流项目(1)总体框架讲解
  • 基于mybatis-plus历史背景下的多租户平台改造
  • EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
  • Spring中三级缓存详细讲解
  • Pytest-Bdd-Playwright 系列教程(完结篇):本框架的功能参数说明