HTTPS基础知识梳理

一、预备知识


1.HTTPS定义

也是一个应用层协议,相当于在HTTP协议的基础上引入了一个加密层 。HTTP协议内容都是按照文本的方式明文传输 的,这就导致在传输过程中出现一些被篡改的情况。

其实相当于HTTP再做一次封装,数据要先经过诸如SSL这样权威的加密软件加密。


2.加密

加密就是把明文 (要传输的信息)进行一系列变换,生成密文 。解密就是把密文再进行一系列变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。比如7作为明文异或5,5就是密钥,得到的结果就是密文。


3.明文的危险性

热点、WiFi、运营商路由器本质就是中间人 ,发送的请求如果是明文 的,就会被这些中间人获取到信息,是不安全的。


4.常见加密方式

(1)对称加密

加密解密用同一个密钥加密速度快

(2)非对称加密

两把秘钥分别负责加密和解密,其中一把秘钥公开(即公钥) 一把不公开(即私钥)就叫非对称加密。可分为两种情况:用公钥加密,只有拥有私钥的人才能解密;用私钥加密,任何拥有公钥的人都可以解密。该方法加密速度慢。

(5)指纹

用hash算法把数据变成固定长度的冲突概率低的字符串,这个字符串叫做数据指纹,只要数据被篡改了,hash算法得出来的指纹就会对不上原来的指纹。


HTTPS工作过程

为了保障数据安全和加密效率,下面给出几种方案做对比,从而理解潜在的威胁。


方案一

双方遵守对称加密

客户端和服务器一开始就约好秘钥,使用对称加密。

问题

但是秘钥要通过网络传输,对秘钥再加密是不可能的(因为二次加密必须知道初始秘钥,可此时初始密钥还没定下来),仍可能被抓到。


方案二

服务器采用非对称加密

服务器把公钥发给客户端,私钥自己留着,客户端发给服务器的时候用公钥加密,然后让服务器来解密,这时候即便黑客拿到了公钥,也无法解密

问题

服务器用私钥加密,意味着可以被公钥解密,而公钥定义就是任何人都可拿到手,黑客也不例外。


方案三

客户端和服务器都使用非对称加密
  1. 服务端拥有公钥S与对应的私钥S',客⼾端拥有公钥C与对应的私钥C'
  2. 客⼾和服务端交换公钥
  3. 客⼾端给服务端发信息:先⽤S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥 S'
  4. 服务端给客⼾端发信息:先⽤C对数据加密,在发送,只能由客⼾端解密,因为只有客⼾端有私钥 C
问题

1.效率低 :非对称加解密比对称加解密慢上千倍,双方都做非对称加密会导致两边都很慢。

2.新的安全问题 :虽规避前两种方案秘钥被截取的可能,但双方都用非对称,服务器怎么知道客户端公钥真的是客户端的呢?中间人完全可以分别伪造一套自己的公私钥,同时让两端认为自己是沟通的那一端,这就是中间人攻击(MITM)


方案四

服务器使用非对称加密,客户端使用对称加密
  1. 服务端具有非对称公钥S和私钥S'
  2. 客户端发起https请求,获取服务端公钥S
  3. 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器。
  4. 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥。
  5. 服务器通过私钥S'解密,还原出客户端发送的对称密钥C。并且使用这个对称密钥加密给客户端返回的响应数据。
  6. 后续客户端和服务器的通信都只用对称加密即可。由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义。
问题
  1. 服务器具有非对称加密算法的公钥S,私钥S'
  2. 中间人具有非对称加密算法的公钥M,私钥M'
  3. 客户端向服务器发起请求,服务器明文传送公钥S给客户端
  4. 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端
  5. 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器
  6. 中间人劫持后,直接用自己的私钥M'进行解密,得到通信秘钥X,再用曾经保存的服务端公钥S加密后,将报文推送给服务器
  7. 服务器拿到报文,用自己的私钥S'解密,得到通信秘钥X
  8. 双方开始采用X进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的

问题总结

上述方案遇到的问题主要是下面两点。

  1. 双方传输的秘钥可能被截获。
  2. 攻击者可以充当中间人同时骗过双方。

证书与安全可行的方案

平时点开的一些网站会显示"该网站的安全证书已经过期"从而提示我们该网站是不安全的,而这个证书指的正是由CA机构颁发的CA认证。下面先介绍CA证书的申请流程、证书的产生过程,然后再提出一套方案可解决上述的安全问题的方案。


申请证书

申请者(也就是服务端)要提前准备好基本信息以及一对公钥和私钥,公钥将提交给CA认证机构,私钥自己保留。


证书的形成

证书包括签名和明文信息,明文信息包含了用户上传的资料,其中公钥就是用户上传的公钥。

CA机构有自己的公钥和私钥,其中公钥是浏览器内置好的,而私钥只有CA机构知道。

对用户数据运算得出数据指纹(也就是数据摘要),CA机构再用自己的私钥加密,就是签名。

签名和原始数据打包得到证书,发放的证书会被安装在服务器里面。


客户端与服务器的安全传输

当客户端发起请求时,服务端先把证书发给客户端。

客户端对证书中的明文信息做哈希运算得到数据指纹A,用浏览器内置的公钥解密签名得到数据指纹B,若A=B则证书合法,同时说明证书明文信息的公钥合法,随后客户端生成一把对称秘钥,用证书里面的公钥(也就是服务器一开始给的公钥)加密,发送给服务器,只有服务器拥有私钥,保障了这个秘钥仅双方知晓。


上述过程中,证书如何解决中间人问题?

用户只要得到证书**,就会用浏览器内置的公钥去解密** ,如果能公钥解密,证书必然是CA机构颁发的,因为匹配的私钥仅CA机构持有。正因如此,只有CA机构才有证书颁发的权利,中间人不具有生成新的证书的资格,这也是CA机构采用非对称加密的原因

如果黑客伪造一份证书,因为没有私钥,用户用唯一公钥解密必然失败。

如果黑客修改了服务端的明文数据,因无法修改签名,客户端对明文数据运算得到的指纹和签名解密得到的指纹必然不同,说明数据是不安全的。

这样一来,用户拿到的公钥一定是没被篡改过的,从而保障安全性。


如果黑客也申请一份证书,将双方证书替换掉呢?

证书里有域名,客户端即将访问的域名肯定是申请过安全证书的服务器域名,黑客再次申请必然得到不同的域名,当浏览器发现客户一开始登上去的域名和验证证书时域名不同,说明不安全。


数据摘要比数据本身短很多,对摘要做加密运算肯定更快,而且摘要是定长的,加密速度稳定。

相关推荐
艾莉丝努力练剑15 分钟前
【AI大模型接入SDK】SSE协议
c++·学习·面试·大模型·sdk
智脑API19 分钟前
CCSwitch Claude Code 如何配置 MCP?服务器启动、工具权限与安全测试
运维·服务器·claude·codex·ccswitch
自然石人20 分钟前
石都随笔:深耕不张扬,平凡自有千钧力
网络·经验分享·百度·传媒·新浪微博
一条破秋裤25 分钟前
STM32 学习笔记:OLED 调试工具与 Keil 在线调试
笔记·stm32·学习
郝学胜_神的一滴33 分钟前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
c++·后端
一只QAQ42 分钟前
c++项目
java·c++·算法
新时代牛马42 分钟前
epoll 源码路径:从epoll_ctl 到ep_poll 的就绪唤醒
网络·数据库·网络协议
简单Janeee43 分钟前
[Vue 3 从零到上线]-第九篇:更美更强——引入 UI 库与网络请求 (Axios)
网络·vue.js·ui
STLearner1 小时前
KDD 2026 | (2月轮)时空数据(Spatial-Temporal)论文总结时空(交通)预测,轨迹数据挖掘(表示,生成)
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘