💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶🔹C++🔹Liunx
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍
文章目录
- 一、为什么需要CA认证
- 二、什么是CA?
- 三、什么是数字证书?
- 四、客户端认证
-
- 1.客户端认证如何去认证呢?
- [2. 再次理解签名和验证](#2. 再次理解签名和验证)
- 五、补充知识:数据摘要(数字指纹)
- 六、总结
- 七、一次完整的https请求
一、为什么需要CA认证
首先,在https一次连接过程我们学习了几种加密方法,最终我们选择了【对称加密+非对称加密
】的方式,但是即便是这样,依然存在安全隐患,因为这个隐患可能发生在建立连接之前,在在最开始握⼿协商的时候就可能已经被攻击者入侵了,又叫中间人攻击
。
如下图:
那么我们得到的这个服务端可能是中间人伪造的,收到的公钥也成了中间人伪造的公钥。为了确保我们能够收到目标服务器的公钥,所以需要有人来对服务器进行一个认证,这个人便是CA机构
,这个认证又叫CA认证
。
二、什么是CA?
CA代表"证书权威(Certificate Authority)",它是一种专门负责发放、管理和撤销数字证书 的专业机构
,是一个可信赖的第三方。在互联网通信中,数字证书用于验证网络用户的身份,如HTTPS网站上显示的小锁图标就表明该网站通过了CA颁发的安全认证。当您浏览加密网站时,浏览器会向CA请求验证服务器身份,如果验证成功,就会得到一个证书,证明服务器是其所声称的那样。
三、什么是数字证书?
数字证书是一种包含证书持有者(也就是向CA机构申请的服务端)的信息、公钥
以及由CA签名的数字签名的电子文档。它类似于现实生活中的身份证,用于在网络环境中验证实体的身份。
服务端的明文信息
(服务端的公钥+域名+失效)+CA的签名
2.什么是明文信息
向CA机构申请的服务端的如下信息就叫明文信息。
2.什么又是数字签名?
就是把服务端明文信息利用哈希散列函数
生成一个固定长度的数值
,这个数值就叫做摘要
。再把这个摘要使用CA的私钥
进行加密就形成了数字签名。
3.生成数字证书
到这里我们的服务器就已经向CA机构申请到一份数字证书。这个过程也称作------
签名
四、客户端认证
服务器已经取得了数字证书,那么此时客户端需要对证书进行一个验证。
- 我们一开始引入CA认证就是为了确保收到的公钥是目标服务器发来的,也就是说服务器是我们想要访问的目标服务器,从而避免中间者攻击问题,所以,服务器向官方CA机构去申请一份证书来证明自己的合法性,但是服务器有了这份证书还不行,当客⼾端获取到这个证书之后,如何去证明你的证书是真的呢(
防⽌证书是伪造的
)?---------客户端认证
1.客户端认证如何去认证呢?
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
- 验证证书是否被篡改
接下来着重讲讲第三点
-
第1步讲证书又拆分成
明文信息
+数字签名
-
首先我们要明白CA机构的公钥是所有人都能拿到的,但是私钥只有CA机构自己拥有。我们第2步先从系统中拿到该证书发布机构的公钥
-
第3步便是对数字签名解密,得到⼀个hash值(也就是数据摘要),前面讲签名操作时,是使用CA密钥加密形成数字签名,现在则是使用CA公钥解密,恢复成哈希值(
摘要1
)。 -
第4步是对明文信息重新计算哈希值(
摘要2
) -
最后一步:对比
摘要1
和摘要2
;相等则验证成功,说明证书是没有被篡改过的
流程图如下:
2. 再次理解签名和验证
五、补充知识:数据摘要(数字指纹)
• 数据摘要(数字指纹),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度 的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
• 摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有 碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)
• 摘要特征:和加密算法的区别是,数据摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推 原信息,通常⽤来进⾏数据对⽐.也可以说数据摘要是不可逆的.
六、总结
一次完整的CA认证如下:
七、一次完整的https请求
面试题:一次https请求中涉及多少对密钥
答:HTTPS ⼯作过程中涉及到的密钥有三组.
第⼀组(⾮对称加密
):就是上述校验证书是否被篡改时的一组CA机构的私钥与密钥。简单说就是服务器持有私钥对数据摘要进行加密形成了数字签名;客户端持有公钥,对分离出来的数字签名进行解密。对比两个摘要是否相等,来保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。(得到的公钥确实来自目标服务器)
第⼆组(⾮对称加密
):⽤证书中的公钥(服务器的公钥)对客户端生成的对称密钥进行加密,传输给服务器端,服务器端接收到后,再使用自己的私钥对公钥进行解密。从而双方都获得了一把钥匙。
第三组(对称加密
):客⼾端和服务器后续传输的数据都通过这个客户端生成的对称密钥进行信息传输.