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 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
wuyk5551 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
QYRdata1 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK1 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
2501_916007471 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
Lsetea1 天前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链
chshang19921 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
萧瑟余晖1 天前
Netty 核心组件与 Reactor 模型详解
网络·架构
ITxiaobing20231 天前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk5551 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网