HTTPS
证书”,可以理解为一个第三方认证机构,这个机构是可信任的。①.证书的颁布机构②.证书的有效期限③.服务器的公钥④.服务器的拥有者(域名) ⑤.证书的数字签名[重点]数字签名,本质上就是一个被加密的校验和,把要校验的数据部分带入一个固定的公式,算出一个数字,类似于之前介绍过的hash函数校验和的计算:首先,先将①②③④这些相关信息作为输入,生成校验和,然后针对这个校验和进行加密,第三方认证机构会生成
(一).概念
HTTPS协议,相当于HTTP+S,HTTP协议在前面已经介绍过了,这个“S”是“SSL”或“TLS”,即相当于是“安全层”,可以理解为 HTTPS协议,是在HTTP协议的基础上,加了一层安全层,防止黑客入侵。因为在使用HTTPS之前,都是使用HTTP协议进行数据传输的,这就会导致数据是明文传输的,从而导致不安全的现象出现,所以为了避免这种情况,就要对传输的数据进行“加密”,把“明文”传输加密成“密文”进行传输。
在进行加密的过程中,就不得不介绍“密钥”的概念。“密钥”就是一行很长的字符串,通过一系列算法生成的,分为“对称密钥”和“非对称密钥”。“对称密钥”指的是,加密和解密使用的是同一个密钥;“非对称密钥”指的是,加密的时候使用其中一个密钥,解密的时候使用另一个密钥,两个密钥不同。把其中一个密钥公布出去,另一个密钥自己保存好。公布出去的密钥称为“公钥”,自己保存好的密钥称为“私钥”
(二).HTTPS工作原理
1.之前
在使用HTTPS协议之前,传输数据都是使用的HTTP协议,所以传输的时候都是明文传输,这就会导致传输的数据就被“黑客”轻易的就获取到了

为了解决明文传输的问题,引入对称密钥
2.引入对称密钥
将传输的数据进行对称加密

此时,如果“黑客”不知道对称密钥key是什么的话,就无法对传输的数据进行解密,则无法理解数据的含义,更不用说修改数据了
但是,这里又有一个问题,客户端和服务器在最开始通信的时候,就需要其中的一方生成对称密钥,然后再通过网络传输给另一方,假设是客户端生成对称密钥,然后传输给服务器,那么这时候就会出现问题

客户端将“对称密钥”传输给服务器的过程中,本身就是明文传输的,既然是明文传输的,那么就有可能被黑客获取到,一旦对称密钥被黑客获取到,那么后续的加密操作就毫无意义了。所以现在我们要解决的问题就是对“对称密钥”进行加密。
如果是再生成一个对称密钥key2给对称密钥key加密的话,key2也是需要明文传输给服务器的,那么既然是明文传输,就会被黑客获取到,所以说,无论套多少层,总有一层需要明文传输,始终无法解决我们的问题,这时,就要引入“非对称密钥”了。
3.引入非对称密钥
非对称密钥就相当于是两个不同的密钥,其中一个密钥可以公布出去,任何人都可以知道,这个密钥称为“公钥”。另一个密钥只有创建非对称密钥的设备自己知道,称为“私钥”。

这就是整体的工作流程。
可能有人会有疑问,“私钥只有服务器知道,那么客户端是如何对响应进行解密的?”
其实,客户端根本不需要解密,因为,对称密钥是由客户端生成的,所以客户端一定知道对称密钥是什么,然后通过公钥对“对称密钥”进行加密之后传输给服务器,当服务器使用私钥对“对称密钥”进行解密之后,此时服务器也知道对称密钥是什么了。之后传输数据都是采用的对“对称密钥”加密进行传输,客户端不需要用非对称加密(私钥)来解密,它解密响应用的是自己一开始就知道的对称密钥
虽然非对称密钥看起来比对称密钥安全,但是也是要付出代价的。非对称密钥的运算速度慢,开销大,如果是加密小的数据还可以,如果是加密大的数据则会非常耗时。对称加密虽然没有非对称加密安全,但是运算速度快,开销小,适合针对大量数据进行加密
事实上,上述的方案还是存在严重问题的。黑客可以通过一些特殊手段,来获取对称密钥,从而破坏后续的传输安全性,这个问题就是“中间人攻击”
4.中间人攻击
中间人攻击就是黑客可能会“偷梁换柱”
下面通过一个图来看

“中间人攻击”的本质就是让客户端无法区分收到的公钥是服务器真实的公钥还是被黑客篡改的公钥
想要解决这个问题,就需要引入一个校验机制,对公钥进行校验,检查是否正确,所以就引入了“证书”的概念
5.引入证书 & 数字签名
(1).具体介绍
“证书”,可以理解为一个第三方认证机构,这个机构是可信任的。服务器通过提交服务器域名,公钥等信息,作为提交材料,然后向这个第三方认证机构申请证书,然后第三方认证机构就会给服务器颁发一个数字证书,这个证书包括五个内容:①.证书的颁布机构②.证书的有效期限③.服务器的公钥④.服务器的拥有者(域名) ⑤.证书的数字签名[重点]
数字签名,本质上就是一个被加密的校验和,把要校验的数据部分带入一个固定的公式,算出一个数字,类似于之前介绍过的hash函数
校验和的计算:
首先,先将①②③④这些相关信息作为输入,生成校验和,然后针对这个校验和进行加密,第三方认证机构会生成一对非对称密钥,然后使用私钥(pri2)进行加密,公钥(pub2)进行解密
如果输入的值是相同的,得到的校验和就是相同的;
如果输入的值不相同,得到的校验和大概率不相同;
如果发现校验和不同,那么输入的初始值一定不相同
下面,还是通过一个图来理解“证书”的使用

(2).具体分析
Ⅰ.当客户端收到“证书”之后的操作
当客户端收到“证书”之后,就要进行校验。客户端会针对证书中的其他字段(①.证书的颁布机构②.证书的有效期限③.服务器的公钥④.服务器的拥有者(域名))使用同样的算法,再算一次校验和,得到校验和1;
再通过公证机构的公钥pub2,对数字签名进行解密,得到校验和2;
最后,对比校验和1和校验和2是否相同,如果相同,则说明证书没有被改过,如何不同,则证书无效,中间被黑客篡改了
Ⅱ.客户端如何确保拿到公证机构的公钥pub2 而不是黑客伪造的pub2 ?
这个pub2就不是通过网络进行传输的,而是操作系统内置的。当电脑安装好系统之后,系统中就内置了一系列知名公正机构的公钥,只要安装的是正版系统,就可以信任公钥pub2是合法的
Ⅲ.如果黑客想要直接修改证书中的公钥为自己的公钥会发生什么?
如果黑客想要直接修改证书中的公钥为自己的公钥,则会导致客户端计算的校验和1 和 解密出来的原始的校验和2就不一样了
因为,校验和是通过①.证书的颁布机构②.证书的有效期限③.服务器的公钥④.服务器的拥有者(域名),计算出来的,如果黑客直接将服务器的公钥改成自己的公钥,势必校验和会发生改变,所以就会使校验和1和校验和2不一样,此时客户端就会报错
Ⅳ.黑客能否自己申请一个证书,用自己的证书整个替换服务器的证书?
答案肯定是不可以的,因为证书中包含了服务器的域名,黑客申请的证书的域名和服务器的证书域名肯定是不一样的。同时,浏览器这边还可以进行验证,输入的url的域名和得到的证书域名是否匹配,如果不匹配,则认为证书非法
Ⅴ.黑客是否能修改证书中公钥和数字签名?
答案肯定使不能的。修改公钥之后,就需要重新计算校验和。但是只有这一个还不够,还需要进行重新加密,加密就意味着要使用公正机构的私钥来进行加密,公证机构的私钥显然是不好拿的,难度较高。如果黑客使用自己的私钥进行加密,那么就会导致客户端使用公正机构的公钥进行解密的时候,会解密失败。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)