news 2026/7/11 6:50:39

【计算机网络】HTTPS协议详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【计算机网络】HTTPS协议详解

文章目录
HTTPS 是什么
什么是“加密”
HTTPS 的工作过程
引入对称加密
引入非对称加密
引入证书机制
完整流程

1. HTTPS是什么

HTTPS是一种应用层协议,是一种透过计算机网络进行安全通信的传输协议。

HTTPS经由HTTP进行通信,但是在HTTP的基础上引入了一个加密层,使用SSL/TLS来加密数据包。

HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS默认工作在TCP协议443端口

2. 什么是“加密”

加密相关术语:

明文:要传输的原始的信息

密文:通过一定的规则将明文变换后的内容

加密:将明文变成密文

解密:将密文变成明文

密钥:在加密和解密的过程中,,往往需要一个或多个中间的数据来辅助该过程,这样的数据称为密钥

为什么需要HTTPS,为什么需要加密?

前几年有一个运营商劫持事件,由于我们通过网络传输的任何数据都会经过运营商的网络设备(路由器、交换机等),那么运营商的网络设备就可以解析出我们传输的数据内容,并进行篡改。

比如你要在下某个软件,当你点击下载时,其实就是在给服务器发送一个 HTTP 请求,获取到的 HTTP 响应本应该包含该软件的下载链接,但是经过运营商劫持后,就可以将这个响应给篡改成其它软件的下载链接,使得篡改者可以获取非法的利益。

上述的例子不止运营商可以劫持,一些黑客或非法人员都可以通过这种手段来窃取用户隐私或者篡改内容。

故 HTTPS 的出现,使用密文传输进一步的保证了用户的信息安全

3. HTTPS的工作过程

既然要保证数据安全,就需要进行“加密”,即网络传输中不再直接传输明文,而是加密之后的“密文”。加密的方式有很多,但是整体可以分为两大类:对称加密和非对称加密

3.1引入对称加密

基本介绍:

对称加密其实就是只通过一个密钥,把明文加密成密文,并且也能把密文解密成明文

如使用异或操作,就可以实现一个简单的对称加密。 设明文为 1234,密钥为 8888。通过明文和密钥异或操作实现加密 1234 ^ 8888,得到密文为 9834。 然后通过密文和密钥异或操作解密 9834 ^ 8888,得到明文 1234

只引入对称加密存在的问题:

通过对称加密,貌似就可以进行数据的保护了。黑客就算入侵了路由器,也只能得到请求的密文内容

但是上述方案有一个问题,就是密钥如何进行约定?毕竟一个服务器对应着很多的客户端,每个客户端和服务器之间都需要约定一个独自的密钥。

可如果让服务器管理所有的密钥,其实并不简单,因此更好的做法就是客户端连接过来时,就自带一个客户端生成好的密钥。当每个客户端在连接之前,自己先生成一个密钥,通过网络将该信息告诉服务器,服务器将这个密钥保存即可。

也正是因为如此,黑客在获取密文请求的同时,也获取到了密钥,因此只使用对称加密并不能起到数据保护的作用。所以还需要让密钥进行加密,但是使用对称加密的话,是行不通的,故引入了非对称加密

3.2 引入非对称加密

基本介绍:

非对称加密要额外再用到两个密钥,一个叫做“公钥”,一个叫做”私钥“。公钥和私钥是配对的,这对密钥由服务器产生。

缺点:

运算速度非常慢,比对称加密慢很多

引入流程:

服务器将公钥直接发送给客户端,将私钥保留。客户端得到公钥后,通过公钥将密钥进行加密,再发送给服务器,服务器通过私钥解密获取到密钥。之后再将收到密钥的消息通过密钥加密后发送给客户端,客户端收到后,就使用该密钥通过对称加密的方式与客户端进行数据传输

引入非对称加密后,为什么还要使用对称加密?

由于对称加密的成本(对机器资源的消耗)远远低于非对称加密,而实际上客户端和服务器之间传输的数据量会很大,如果都使用非对称加密,整体的传输速度就会很慢,因此通过非对称加密,让服务器得到密钥后,再使用对称加密进行传输,能够提高传输的效率

引入非对称加密后还存在的问题:

服务器首先生成一对公钥A和私钥A。首先服务器要把公钥A发送给客户端,此时黑客可以当作一个中间人,自己生成一对公钥B和私钥B。他会将服务器的信息阶段,并将自己生成的公钥B发送给客户端。当客户端得到公钥B后,就使用公钥B加密自己生成的密钥A并发送给服务器。此时黑客再次截取,通过私钥B解密公钥B,得到密钥A,并使用公钥A将密钥进行加密返回给服务器。至此服务器和客户端都确定了密钥A,但黑客也神不知鬼不觉的知道了密钥A。故在之后的数据传输中,黑客就可以直接完全的获取客户端和服务器的明文数据。因此即使引入了非对称机密还是存在两个问题:

客户端如何获取公钥?

客户端如何确定这个公钥是不是黑客伪造的?

为了解决这个问题,就引入了证书

3.3 引入证书机制

基本介绍:

在客户端和服务器刚建立连接时,服务器就给客户端返回一个证书。这个证书就好比人的身份证,用来作为网站的身份标识。而每搭建一个 HTTPS 网址时都需要在 CA 机构申请一个证书。

证书含有的重要信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名

引入证书流程:

服务器首先产生一对公钥和私钥,在第三方公证机构申请一个证书时,该证书内就包含了公钥的信息,然后服务器就会将公钥发送给客户端,由于证书的校验很严格,因此黑客就算获取了,也很难伪造一个假的证书。即使伪造了,客户端也可以拿到第三方公证机构去校验,因此客户端就能够拿到服务器发送的公钥,之后再通过公钥加密自己产生的密钥,发送给服务器。由于黑客没有私钥,就算截获了该请求,也不能拿到密钥,因此服务器就能顺利的得到加密的密钥,并使用私钥来解密。最终就能够很好的防止黑客获取或篡改数据。

校验证书方式:

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任
  • 判定证书是否被篡改(从系统中拿到该证书发布机构的公钥,对签名解密,得到一个 hash 值(称为数据摘要),设为 hash1。然后计算整个证书的 hash 值,设为 hash2。对比 hash1 和 hash2 是否相等,如果相等,则说明证书是没有被篡改过的)

理解数据值摘要和签名:

针对一段数据,可以通过一些特定的算法对这个数据生成一个签名。由于不同的数据生成的签名差别很大,因此就可以使用签名在一定程度上区分不同的数据。常见的生成签名的算法有:MD5 和 SHA,以下以 MD5 为例,介绍其特点

  • 定长:无论多长的字符串,计算出来的 MD5 值都是固定长度(16字节版本或者32字节版本)
  • 分散:源字符串只要改变一点点,最终得到的 MD5 值都会差别很大
  • 不可逆:通过源字符串生成 MD5 很容易,但是通过 MD5 还原成原串理论上是不可能的

由于 MD5 这样的特性,因此可以认为如果两段数据的 MD5 值相同,则这两段数据相同

3.4完整流程

  • 对称加密:需要有一个客户端生成的对称密钥,用于对传输的数据进行加密,但需要将该对称密钥告知给服务器
  • 非对称加密:服务器提供一个公钥(自己持有私钥),将公钥传发送给客户端,客户端使用公钥对对称密钥进行加密,将密文传送给服务器
  • 引入证书机制:通过第三方公证机构,向网站颁发证书,该证书里面就含有公钥。客户端向服务器请求的也就是证书,客户端拿到证书后去公证机构校验,如果证书合法,就使用里面的公钥对对称密钥进行加密
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 6:49:49

Godot引擎项目设置与优化全攻略:从入门到性能调优

1. 项目概述:为什么项目设置与优化是Godot开发的第一道门槛如果你刚接触Godot引擎,可能会觉得创建一个新项目、拖几个节点、写几行脚本就能跑起来,这引擎真简单。但当你真正开始做一个正经项目,无论是2D平台跳跃、3D RPG&#xff…

作者头像 李华
网站建设 2026/7/11 6:49:21

Shiro 1.7.1 升级实战:3步解决密钥硬编码与重启失效问题

Shiro 1.7.1 安全升级实战:密钥动态化与持久化架构设计1. 漏洞本质与升级必要性2019年曝光的Shiro反序列化漏洞(CVE-2016-4437)揭示了传统安全架构中的致命缺陷。其核心问题在于硬编码加密密钥与会话管理机制的设计缺陷:密钥固化风险:1.2.4及…

作者头像 李华
网站建设 2026/7/11 6:46:55

聆听宇宙的“耳膜“:抛物面天线的馈源设计

提到抛物面天线,大多数人脑子里第一个蹦出来的画面,要么是贵州大山里那口五百米口径的"中国天眼"(FAST),要么就是早年间屋顶上接收卫星信号的"大锅"。不管尺寸差了多少个数量级,它们的…

作者头像 李华
网站建设 2026/7/11 6:46:30

计算机毕业设计之基于Spring的体育场地预约平台设计与实现

摘要随着全民健身意识的不断提升,体育场地的预约需求日益增长,一个高效、便捷的体育场地预约平台显得尤为重要。本设计旨在基于Spring框架和Vue前端技术,构建一个功能全面的体育场地预约系统,以满足用户和管理员的不同需求。系统前…

作者头像 李华
网站建设 2026/7/11 6:46:11

java中有哪些集合类

面试 Java 中的集合类主要分为两大类:Collection 接口和 Map接口 前者是存储对象的集合类,后者存储的是键值对(key-value) Collection 接口下又分为 List、Set和 Queue 接口,每个接口有其具体实现类,Map接口…

作者头像 李华