HTTPS核心机制详解

HTTPS流程:

对称加密:

  1. 加密和解密所用的密钥相同!
  2. 效率高、算法公开

例子:

假设我们要传递一个值:int a = 10;此时客户带持有一个加密密钥:int b =20;服务器也有一个相同的密钥:int b = 20;客户端发送数据加密后为int tmp = a^b;

服务器接收到数据后-->int recv = tmp; 讲recv ^ b = abb = a^0 =a;就拿到了真正要传递的值!

非对称加密:

存在公有密钥和私有密钥;

两种方式:先用公钥加密,则只能由私钥解密--意味着能解密的人少!!

先用私钥加密,再用公钥解密--->意味着只要有公钥就能解密!!

数据摘要和数据指纹

数据摘要:

第一种应用场景:云盘

客户端上传文件/数据 -->hash散列算法--->形成数据摘要(hash值)--->服务端验证摘要是否曾经在服务端内部存在,如果存在则证明上传的文件内容相同!!!

场景二:

加密用户传递的密码--数据库--hash验证摘要

四种方案:

  1. 双方都使用对称加密:

    存在很严重的问题:

  2. 如果是client--->server发送信息,client要发送的信息应该是 info(原始数据) + 密钥K

    server收到的是加密过的信息,但是server同样会使用密钥K去对该信息解密!问题就在这里:密钥K在交换时是可以被中间人获取的,那么由于server同样使用密钥K解密,意味着只要是持有密钥K的角色都能对client的数据进行解密,这是绝对不允许的!!

  3. 一方使用非对称加密:

    client使用公钥进行加密,即message = 原始数据 + 公钥K --->server

    数据传递的过程中任何人都可以获取到公钥,server收到加密的信息后,使用自己的私钥M去解密,在clinet-->server的传输方向来看虽然是安全的,但是!!server的响应呢??server采用私钥M加密rsp,发回client,client采用公钥K解密,这就意味着server的rsp是不安全的!!

  4. 双方都使用非对称加密

    双方都是用公钥加密信息,自己的私钥解密信息:

    双方正式通信之前,先进行密钥交换

    client:公钥A,私钥B

    server:公钥C,私钥D

  5. 先交换各自的公钥,client--->公钥A-->server拿到公钥A;server--->公钥C-->client拿到公钥C

    2,开始使用对方的公钥加密自己要发送的信息,对方收到使用自己的私钥机密即可!!

但是!也是不安全的!!!

公钥交换阶段时,万一公钥被篡改了呢???是不是就不安全了啊!!!

并且非对称加密速度慢,计算开销大

  1. 双方使用对称机密 + 非对称加密
    首先client啥都不做,server生成一个公钥S和一个私钥S^
  2. 密钥交换阶段,server向client发送自己的公钥S,此时这个公钥S任何人都可以获取到!包括中间人
  3. client拿到服务器的公钥S后,在自己的本地生成一对对称密钥C
  4. client如何将自己的对称密钥C发给server呢??答案是用server的公钥S加密对称密钥C!!密钥也是数据啊!!!加密后发起http请求,server收到请求,使用只有自己知道的私钥S^进行解密,获得密钥C,此时,server和client都知道了密钥C,所以之后的通信都采用对称加密的方式就行了!!

问题来了"如果在公钥S的发送阶段时,中间人直接篡改了公钥S换成自己的公钥R,发送给client,此时client事先并不知道真正的server的公钥的!!当client收到中间人的公钥R时,万一直接用公钥R进行加密自己的对称密钥嗯??是不是在client看来,此时的server实际上已经是中间人了!!往后所有的通信都会被中间人获得并解密!!

CA证书和签名:

数字签名:

CA机构向原始数据进行哈希散列形成散列值,并用自己的私钥进行加密-->即这就是签名过程

CA证书:

签名 + 证书的明文信息(info)

在client<--->server过程中,首次通信server会先向client发送证书,证书中含有server自己的公钥和证书有效期、CA机构、数字签名等,client(浏览器)通常会内置信任的CA机构的公钥列表,如果client收到证书后对比发现不在自身的信任列表中,则会拒绝或者提示本次连接危险/不安全!!如果在信任列表中,则拿出相应CA机构的公钥进行解密,client首先对比数字签名,对证书的明文信息采用和签发给server证书的CA机构相同的哈希算法得到一个散列值,将其与解密后的签名进行对比,一致则表示信息未被篡改过。

这样即使证书被劫持,中间人在没有CA机构私钥的情况下是无法伪造数据签名的!!!只有持有私钥的人才能签发证书!!

即第五种安全方案!

但是!!!也有安全问题,如果中间人自己持有一份真正的CA机构颁发的合法证书,在client和server的证书交换阶段直接将server发送的证书全部替换为自己的证书,发给client呢?

别忘记了!!证书中的info中含有域名信息!!!!!client会进行域名验证的!!

HTTPS整体流程:

相关推荐
西装没钱买1 分钟前
已连接(connected)UDP和未连接(unconnected)UDP的区别
网络协议·tcp/ip·udp连接
火星数据-Tina4 分钟前
⚽ 实时赛事数据怎么接?WebSocket vs REST 接口详解!
网络·websocket·网络协议
稳联技术35 分钟前
与AI联手,ModbusTCP 转Ethercat控制系统升级解决刚需新思路
网络
链上Sniper1 小时前
区块链架构深度解析:从 Genesis Block 到 Layer 2
开发语言·网络·架构·区块链·php
搬码临时工2 小时前
如何开启自己计算机远程桌面连接功能? 给别人或异地访问
运维·服务器·网络·远程工作
勤奋的小王同学~3 小时前
(javaEE)网络原理-初识 局域网和广域网 ip地址和端口号 协议 五元组 协议分层 OSI七层模型 网络数据通信的基本流程
运维·服务器·网络
2501_915106323 小时前
无需 Mac,使用Appuploader简化iOS上架流程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
工程师0073 小时前
C#AES加密
网络·安全·web安全·c#
厦门辰迈智慧科技有限公司4 小时前
水库大坝安全监测之渗流监测
网络·物联网·安全
sztomarch5 小时前
Router-Routing
linux·运维·服务器·前端·网络