HTTPS的工作过程

2023-09-17 11:07:12

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

对称加密

        对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文,引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的 真实内容是啥了

        但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端 和每个密钥之间的关联关系, 这是一件很麻烦的事情

        比较理想的做法, 就是能在客户端和服务器建立连接的时候, 由客户端发送对HTTP数据进行加密的对称密钥给服务器

        但是如果直接把对称密钥明文传输, 那么黑客也就能获得对称密钥了,所以对称密钥在发送给服务器时也必须是加密传输

非对称加密

        非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥".

        公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.

        通过公钥对明文加密, 变成密文 通过私钥对密文解密, 变成明文,也可以反着用 通过私钥对明文加密, 变成密文 通过公钥对密文解密, 变成明文

使用非对称加密来传输对称密钥的流程

        1.首先由服务器生成一组公钥-私钥,服务器自己留下私钥,把公钥发送给客户端

        2.客户端收到公钥以后,用收到的公钥加密对称密钥,并把加密后的对称密钥发送给服务器

        3.服务器收到加密后的对称密钥后,用保留着的私钥进行解密,获得对称密钥的内容

        4.服务器用收到的对称密钥加密HTTP应答数据,并发送给客户端

        5.客户端收到应答数据后,用对称密钥进行解密,获得HTTP应答数据,此时客户端就知道服务器已经获得了对称密钥,客户端就用对称密钥加密业务数据发送给服务器

        6.此后,客户端和服务器用对称密钥加密数据进行通信即可,因为对称密钥只有客户端和服务器双方有,黑客就算截获到了密文,没有对称密钥也不知道内容

        由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商对称密钥的时候使用非对称加密, 后续双方都有对称密钥了就不需要非对称加密了

采用非对称加密就能保证数据安全传输了吗❓

        答案是远远不够滴,因为黑客又想到了“中间人攻击”的方式来获得对称密钥

        

        现在就让我来详细描述一下黑客是如何进行中间人攻击的

        1.首先由服务器生成一组公钥pub1-私钥pri1,服务器自己留下私钥pri1,把公钥pub1发送给客户端

        2.黑客先客户端一步截获到了服务器发送给客户端的公钥pub1,黑客自己又生成了一组公钥pub2-私钥pri2,黑客将自己生成的公钥pub2发送给客户端

        3.客户端用黑客发送过来的公钥pub2加密对称密钥,并把加密后的对称密钥发送给服务器

        4.黑客先服务器一步获取到加密后的对称密钥,由于对称密钥是用黑客发送的公钥pub2加密的,所以黑客可以用私钥pri2进行解密,获取到对称密钥的内容,然后黑客再用服务器发送的公钥pub1加密对称密钥,再把加密后的对称密钥发送给服务器

        5.服务器收到对称密钥后,由于黑客是用服务器发送过来的公钥pub1加密的,所以服务器用私钥pri1可以成功解密,获得对称密钥

        6.此时,客户端和服务器都不知道对称密钥其实已经被获取了,之后用这个对称密钥发送的业务数据都将被黑客截获,被读取到其中的内容

        看完之后是否感叹黑客的手段,但聪明的程序猿还是有办法解决

引入证书

        在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书. 这个证书包含了刚才的公钥, 也包含了网站的身份信息.

         这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证).

        这个证书可以理解成是一个结构化的字符串, 里面包含了以下信息: 证书发布机构 证书有效期 公钥 证书所有者 签名 ......

        当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)

        通过证书客户端便能知道当前的公钥是服务器发送的还是黑客发送的,便防止了黑客进行中间人攻击

黑客有没有可能去修改证书中的公钥呢❓

        我们上面提到,证书中包含了服务器要发送给客户端的公钥,那么黑客有没有可能去修改证书中的公钥呢,这是有可能的,但是客户端能够发现证书中的公钥被修改

        客户端是如何发现证书被修改过的呢❓

        证书中有一个属性是数字签名,实际上就是一个加密后的校验和,校验和是通过证书中的内容和算法计算出来的

        当黑客修改证书中的公钥发送给客户端,客户端在收到证书后会对证书中的数字签名进行解密,获得校验和,客户端还会再根据证书中的内容计算一次校验和,比较当前计算的校验和与数字签名中的校验和是否相同,要是黑客修改过公钥的话校验和就肯定不相同,客户端就能够发现了

黑客有没有可能公钥和数字签名一起修改呢❓

        聪明的小伙伴可能想到了这个问题,我们前面提到,客户端之所以能够发现证书中的公钥被修改过,是因为数字签名解密后得到的校验和与实际计算出来的校验和不同,那黑客把公钥和数字签名都改了,让客户端计算出来的校验和与数字签名解密得到的校验和一样,该怎么办呢

        实际上黑客是可以公钥和数字签名一起修改的,但还是会被客户端发现

        因为数字签名实际上是通过CA机构私钥加密后的校验和,CA机构公钥是内置于操作系统中的,所以只要有操作系统的电脑都有CA机构公钥,能够去解密数字签名,包括黑客

        所以黑客能够解密数字签名,将证书中的公钥以及数字签名全部修改,但修改以后黑客不能将数字签名再加密回去,因为CA机构的私钥黑客是没有的,要是黑客用自己的私钥对数字签名进行加密的话,客户端用内置的CA机构的公钥就不能解密,客户端就知道了这个证书有问题,也就不会用这个证书中的公钥加密数据了

总结HTTPS的工作过程

        

        

                        我们对于HTTPS工作过程的讨论到这里就结束了,但其实黑客还是会有办法去获取到对称密钥,毕竟道高一尺魔高一丈嘛,但聪明的程序猿还是会有办法的,这里就不过多讨论了

更多推荐

JavaWeb概念视频笔记

学习地址:102.尚硅谷_Tomcat-Tomcat服务器和Servlet版本的对应关系_哔哩哔哩_bilibili目录1.JavaWeb的概念2.Web资源的分类3.常用的Web服务器4.Tomcat服务器和Servlet版本的对应关系5.Tomcat的使用a.安装b.目录介绍c.如何启动Tomcat服务器另一种启动

9.19号作业

2>完成文本编辑器的保存工作widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QFontDialog>#include<QFont>#include<QMessageBox>#include<QDebug>#include<QColorDia

[npm]脚手架本地全局安装1

[npm]脚手架本地全局安装1npmlink全局安装npminstall全局安装卸载全局安装的脚手架该文章是你的脚手架已经开发完成的前提下,你想要本地全局安装该脚手架,便于本地使用脚手架的命令的情况npmlink全局安装如果本地开发的项目是个脚手架,只是个人使用,也并不需要上传到npm或者私库,如何安装本地的项目到包的

设计模式(2) - 创建型模式

创建型模式指的是创建对象或是获取实例的方式。1、工厂模式平时写一些简单的代码可能会直接用new创建出一个对象,但是实际在阅读一些功能比较多、规模比较庞大的工程时,可能会发现有多个类继承于同一个基类的情况,它们拥有同样的接口但是实现了不同的功能。它们可能是可以互相替代的两套系统(例如AndroidMedia中的ACode

Docker 容器设置为自动重启

Docker自动重启原因Docker自动重启通常是由以下几个原因导致的:程序崩溃系统内存不足系统进程使用过多CPU和RAM导致的阻塞docker容器被杀死或重新启动,导致应用程序中断网络中断当这些问题出现时,Docker会自动重启运行中的服务来尝试解决问题。dockerupdate--restart=alwaysmys

【docker】容器跟宿主机、其他容器通信

说明容器跟宿主机、其他容器通信的关键在于它们要在同一个网络,或者通过修改路由信息来可以让它们互相之间能够找得到对方的IP。本文主要介绍让它们在同一个网络的方法。Docker自定义网络模式介绍Docker容器可以通过自定义网络来与宿主机或其他容器进行通信。在Docker中,有三种类型的网络:bridge网络、host网络

使用ElementPlus实现内嵌表格和内嵌分页

前言有时遇到这样的需求,就是在表格里面嵌入一个表格,以及要求带有分页,这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子,毕竟Vue3兼容Vue2语法,若想要Vue3版本例子,简单改改就OK了。一、示例代码(1)/src/views/Example/InlineTable/index.vue<

proteus中的各种电阻-可变电阻-排阻

在原理图中使用各类型的电阻是很常见的事情,尤其类似与排阻、可变电阻,但这些电阻对于不熟悉proteus的童鞋来说,一下子可能很难找到,或者很难找心中所想的那个类型,这里分类列出,便于大家使用。文章目录一、普通电阻1、普通电阻(模拟信号电阻)2、上拉与下拉电阻(模拟信号电阻常常报错)二、排阻1、ResistorPack2

Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

目录一、@SpringBootApplication二、@SpringBootConfiguration三、@EnableAutoConfiguration四、@ComponentScan一、@SpringBootApplication@SpringBootApplication是SpringBoot框架的核心注解之一

SSL免费证书会报安全提示吗?

安全性是互联网世界中至关重要的一环,其中一个关键组成部分就是SSL证书,它们用于加密在用户浏览器和服务器之间传输的数据,以确保数据的保密性和完整性。然而,有关SSL证书的一个常见问题是:免费SSL证书是否会触发安全警告?本文将深入探讨这个问题,以帮助您更好地理解SSL证书的工作原理以及免费证书可能对您的网站安全性产生的

【Spring Boot】详解restful api

目录1.restfulapi1.1.历史1.2.内容1.3.传参2.SpringBoot中的RestfulApi1.restfulapi1.1.历史RESTfulAPI(RepresentationalStateTransferfulApplicationProgrammingInterface)是一种设计风格,用于构

热文推荐