HTTPS协议原理与CA认证

目录

引言

HTTPS 是什么

1.什么是"加密"

2. 为什么要加密

3. 常⻅的加密⽅式

对称加密

⾮对称加密

4.数据摘要 && 数据指纹

5. 数字签名

HTTPS 的⼯作过程探究

⽅案 1 - 只使⽤对称加密

⽅案 2 - 只使⽤⾮对称加密

⽅案 3 - 双⽅都使⽤⾮对称加密

⽅案 4 - ⾮对称加密 + 对称加密

缺陷

引入证书

⽅案 5 - ⾮对称加密 + 对称加密 + 证书认证

关于证书的准确性

中间⼈有没有可能篡改该证书?

中间⼈整个掉包证书?

常⻅问题

为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?--重点是不可伪造

为什么签名不直接对数据加密,⽽是要先hash形成摘要?

如何成为中间⼈ 

完整流程

总结


引言

在当今的网络世界中,数据的安全性和隐私保护显得尤为重要。随着互联网的普及和信息技术的发展,用户在网络上传输的数据量日益增加,这就要求有一种机制能够保障数据在传输过程中的安全性。HTTPS(Hypertext Transfer Protocol Secure)协议应运而生,它为互联网通信提供了一种安全的传输方式。而CA(Certificate Authority,证书权威机构)认证则是确保HTTPS协议安全性的关键环节。

本文的核心将介绍https的加密方式与ca认证相关的知识。

HTTPS 是什么

HTTPS 也是⼀个应⽤层协议. 是在 HTTP 协议的基础上引⼊了⼀个加密层。
HTTP 协议内容都是按照⽂本的⽅式明⽂传输的. 这就导致在传输过程中出现⼀些被篡改的情况。

1.什么是"加密"

加密就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂ 。
解密就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂ .
在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密钥 (正确发⾳ yue 四声, 不过⼤家平时都读作yao四声)。
举个栗子:
83 版 <<⽕烧圆明园>> , 有⼈要谋反⼲掉慈禧太后. 恭亲王奕䜣给慈禧递的折⼦. 折⼦内容只是扯⼀扯家常, 套上⼀张挖了洞的纸就能看到真实要表达的意思.
明⽂: "当⼼肃顺, 端华, 戴恒" (这⼏个⼈都是当时的权⾂, 后来被慈禧⼀锅端).
密⽂: 奏折全⽂
密钥: 挖了洞的纸
多扯一句
加密解密到如今已经发展成⼀个独⽴的学科: 密码学.
⽽密码学的奠基⼈, 也正是计算机科学的祖师爷之⼀, 艾伦·⻨席森·图灵。
对⽐我们另⼀位祖师爷冯诺依曼。
好像图灵⼤佬的头发有点多.....
其实这是⼀个悲伤的故事. 图灵⼤佬年少有为, 不光奠定了计算机, ⼈⼯智能, 密码学的基础, 并且在⼆战中⼤破德军的 Enigma 机, 使盟军占尽情报优势, 才能扭转战局反败为胜. 但是因为⼀些原因, 图灵⼤佬遭到英国皇室的迫害, 41岁就英年早逝了.计算机领域中的最⾼荣誉就是以他名字命名的 "图灵奖" (如果这位大佬没有被迫害,可能计算机的发展又会提速几十年!!!)。

2. 为什么要加密

不知道大家有没有遇到过 臭名昭著的 "运营商劫持事件"(这个是可以说的吗(狗头护体))
下载⼀个 天天动听
未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接.
已被劫持的效果, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接
由于我们通过⽹络传输的任何的数据包都会经过运营商的⽹络设备(路由器, 交换机等), 那么运营商的⽹络设备就可以解析出你传输的数据内容, 并进⾏篡改.
点击 "下载按钮", 其实就是在给服务器发送了⼀个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就⾃动的把交给⽤⼾的响应给篡改成 "QQ浏览器" 的下载地址了!
所以:因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双⽅察觉,这就是 中间⼈攻击 ,所以我们才需要对信息进⾏加密。
说到这里,笔者就不免发怒!很多小学生在浏览器下载软件的时候,常常就会抱怨“为什么我下载XXX,还能下载出病毒来?”,虽然小学生不懂网络,但是绝对有somebody恶意劫持报文的原因

不⽌运营商可以劫持, 其他的 ⿊客 也可以⽤类似的⼿段进⾏劫持, 来窃取⽤⼾隐私信息, 或者篡改内容.试想⼀下, 如果⿊客在⽤⼾登陆⽀付宝的时候获取到⽤⼾账⼾余额, 甚⾄获取到⽤⼾的⽀付密码.....在互联⽹上, 明⽂传输是⽐较危险的事情!!!

HTTPS 就是在 HTTP 的基础上进⾏了加密, 进⼀步的来保证⽤⼾的信息安全

3. 常⻅的加密⽅式

对称加密

采⽤单钥 密码系统 的加密⽅法,同⼀个 密钥 可以同时⽤作信息的加密和解密,这种加密⽅法称为对
称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
常⻅对称加密算法(了解): DES 3DES 、AES、TDEA、 Blowfish 、RC2等
特点:算法公开、计算量⼩、加密速度快、加密效率⾼
对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂.

还是举个栗子

⼀个简单的对称加密, 按位异或

假设 明⽂ a = 1234, 密钥 key = 8888

则加密 a ^ key 得到的密⽂ b 为 9834.

然后针对密⽂ 9834 再次进⾏运算 b ^ key, 得到的就是原来的明⽂ 1234.

(对于字符串的对称加密也是同理, 每⼀个字符都可以表⽰成⼀个数字)

当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使⽤按位异或.

对称加密与其局限

对称加密是一种加密技术,其中加密和解密过程使用相同的密钥。以下是对称加密的主要特点和局限性:

### 对称加密的主要特点:

1. **速度快**:对称加密算法通常比非对称加密算法更快,因为它们的计算量较小。

2. **简单**:对称加密的算法和实现通常比较简单。

3. **密钥长度**:密钥长度通常较短,从64位到256位不等,这取决于所使用的算法和所需的安全级别。

4. **用途广泛**:对称加密广泛应用于数据加密标准(如AES、DES、3DES等)。

### 对称加密的局限性:

1. **密钥分发问题**:由于加密和解密使用相同的密钥,因此必须有一种安全的方法将密钥分发给所有需要访问加密数据的用户。在用户数量多或分布广的情况下,密钥分发变得复杂且风险高。   

2. **密钥管理**:随着网络中用户和设备的增加,密钥的管理变得复杂。需要定期更换密钥以保持安全性,这进一步增加了管理的难度。

3. **无法提供身份验证**:对称加密本身不提供身份验证机制,因此无法保证消息的来源是真实的。需要额外的机制(如消息认证码)来验证消息的完整性和来源。

4. **不具备非否认性**:由于双方共享相同的密钥,因此无法提供非否认性,即无法证明消息是由特定的发送者发送的。

5. **安全性依赖于密钥的保密性**:如果密钥泄露,所有的加密数据都可能会被解密。因此,密钥的安全存储和传输至关重要。

6. **不支持数字签名**:对称加密不支持数字签名,这是一种验证消息完整性和发送者身份的机制。

7. **规模扩展性差**:在大型网络中,每个用户都需要与其他所有用户建立独立的密钥,这导致了密钥数量的指数级增长,难以管理。

为了克服这些局限性,通常会结合使用对称加密和非对称加密(如公钥加密)。例如,可以使用非对称加密来安全地分发对称加密的密钥,然后使用对称加密来加密实际的通信内容,这样既保证了安全性,又提高了效率。

⾮对称加密

要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私 有密钥
(private key,简称私钥)。
常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA
特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对
称加密解密的速度快。
⾮对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥".
公钥和私钥是配对的. 最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多.
通过公钥对明⽂加密, 变成密⽂
通过私钥对密⽂解密, 变成明⽂
也可以反着⽤
通过私钥对明⽂加密, 变成密⽂
通过公钥对密⽂解密, 变成明文
举个栗子
⾮对称加密的数学原理⽐较复杂, 涉及到⼀些 数论 相关的知识. 这⾥举⼀个简单的⽣活上的例⼦.
A 要给 B ⼀些重要的⽂件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:
B 说: 我桌⼦上有个盒⼦, 然后我给你⼀把锁, 你把⽂件放盒⼦⾥⽤锁锁上, 然后我回头拿着钥匙来开锁取⽂件.
在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都⾏(不怕泄露), 但是私钥只有 B ⾃⼰持有. 持有私钥的⼈才能解密.

非对称加密

非对称加密算法,如RSA、ECC(椭圆曲线加密算法)等,其核心特点就是使用一对密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密。这种加密方式的安全性不在于公钥的保密性,而在于以下数学特性:

1. **单向性**:根据公钥加密的信息,不能(至少在当前计算能力下不可能)通过公钥解密。这意味着即使公钥是公开的,攻击者也无法利用公钥来解密由它加密的数据。

2. **数学难题**:非对称加密算法基于某些复杂的数学难题,如大数分解(RSA)或椭圆曲线离散对数问题(ECC)。这些难题确保了在不知道私钥的情况下,解密加密信息在计算上是不可行的。

以下是一些关于非对称加密安全性的要点:

- **公钥加密**:公钥加密的数据只能用对应的私钥解密。即使公钥是公开的,攻击者也无法解密公钥加密的信息,除非能够解决上述数学难题。

- **私钥保密**:私钥必须保密,因为它是解密信息的唯一方式。如果私钥泄露,那么所有用对应公钥加密的信息都会被暴露。

- **密钥长度**:非对称加密算法使用的密钥长度通常很长(如2048位或更多),这使得通过暴力破解成为不可能的任务。

- **用途限制**:非对称加密通常不用于直接加密大量数据,因为其速度较慢。它更多地用于密钥交换(如Diffie-Hellman密钥交换)和数字签名,确保信息的完整性和认证。

尽管非对称加密被认为是安全的,但它并不是绝对安全的。以下是潜在的风险和挑战:

- **量子计算**:未来量子计算机的发展可能会破坏现有非对称加密算法的安全性,因为量子计算机能够高效解决大数分解和离散对数问题。

- **算法实现缺陷**:加密算法的实现可能存在漏洞,这些漏洞可能会被攻击者利用。

- **密钥管理**:私钥的安全存储和管理是一个挑战。如果私钥管理不善,可能会被未授权的第三方获取。

- **侧信道攻击**:通过物理手段(如时间分析、功耗分析等)可能会泄露私钥信息。

因此,虽然非对称加密算法在数学上被认为是安全的,但实际应用中仍需注意算法的选择、密钥的管理和系统的整体安全性。

4.数据摘要 && 数据指纹


• 数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。


• 摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)

• 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐。

**敏感性**:散列函数对输入数据非常敏感,即使是微小的变化也会导致散列值发生显著变化。

5. 数字签名

摘要经过加密,就得到数字签名(后⾯细说)。

HTTPS 的⼯作过程探究

既然要保证数据安全, 就需要进⾏ "加密".
⽹络传输中不再直接传输明⽂了, ⽽是加密之后的 "密⽂".
加密的⽅式有很多, 但是整体可以分成两⼤类: 对称加密 和 ⾮对称加密。

⽅案 1 - 只使⽤对称加密

如果通信双⽅都各⾃持有同⼀个密钥X,且没有别⼈知道,这两⽅的通信安全当然是可以被保证的(除⾮密钥被破解)
一旦黑客入侵了路由器(你的所有数据都要经过路由转发),窃取了密钥,那么就可以借助密钥进行数据解密。
引⼊对称加密之后, 即使数据被截获, 由于⿊客不知道密钥是啥, 因此就⽆法进⾏解密, 也就不知道请求的真实内容是啥了.
但事情没这么简单. 服务器同⼀时刻其实是给很多客⼾端提供服务的. 这么多客⼾端, 每个⼈⽤的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, ⿊客就也能拿到了).
因此服务器就需要维护每个客⼾端和每个密钥之间的关联关系, 这也是个很⿇烦的事情~
⽐较理想的做法, 就是能在客⼾端和服务器建⽴连接的时候, 双⽅协商确定这次的密钥是啥~

但是如果直接把密钥明⽂传输, 那么⿊客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了.
因此密钥的传输也必须加密传输!
但是要想对密钥进⾏对称加密, 就仍然需要先协商确定⼀个 "密钥的密钥". 这就成了 "先有鸡还是先有蛋" 的问题了. 此时密钥的传输再⽤对称加密就⾏不通了.

⽅案 2 - 只使⽤⾮对称加密

鉴于⾮对称加密的机制,如果服务器先把公钥以明⽂⽅式传输给浏览器,之后浏览器向服务器传数据前都先⽤这个公钥加密好再传,从客⼾端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
但是服务器到浏览器的这条路怎么保障安全?
如果服务器⽤它的私钥加密数据传给浏览器,那么浏览器⽤公钥可以解密它,⽽这个公钥是⼀开始通过明⽂传输给浏览器的,若这个公钥被中间⼈劫持到了,那他也能⽤该公钥解密服务器传来的信息了。

⽅案 3 - 双⽅都使⽤⾮对称加密

1. 服务端拥有公钥S与对应的私钥S',客⼾端拥有公钥C与对应的私钥C'
2. 客⼾和服务端交换公钥
3. 客⼾端给服务端发信息:先⽤S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S'
4. 服务端给客⼾端发信息:先⽤C对数据加密,在发送,只能由客⼾端解密,因为只有客⼾端有私钥C'
这样貌似也⾏啊,但是 效率太低  依旧有安全问题
虽然步骤繁琐,但是双方通信时,依然需要先互相交换公钥。

⽅案 4 - ⾮对称加密 + 对称加密

先解决效率问题

服务端具有⾮对称公钥S和私钥S'

• 客⼾端发起https请求,获取服务端公钥S
• 客⼾端在本地⽣成对称密钥C, 通过公钥S加密, 发送给服务器.
• 由于中间的⽹络设备没有私钥, 即使截获了数据, 也⽆法还原出内部的原⽂, 也就⽆法获取到对称密钥(真的吗?)
• 服务器通过私钥S'解密, 还原出客⼾端发送的对称密钥C. 并且使⽤这个对称密钥加密给客⼾端返回的响应数据.

后续客⼾端和服务器的通信都只⽤对称加密即可. 由于该密钥只有客⼾端和服务器两个主机知道, 其
他主机/设备不知道密钥即使截获数据也没有意义.
后续只需要用对称加密,就大大提高了数据传输的效率(由于对称加密的效率⽐⾮对称加密⾼很多, 因此只是在开始阶段协商密钥的时候使⽤⾮对称加密, 后续的传输仍然使⽤对称加密)。

缺陷

虽然上⾯已经⽐较接近答案了,但是依旧有安全问题
⽅案 2,⽅案 3,⽅案 4都存在⼀个问题,如果最开始,中间⼈就已经开始攻击了呢?
中间⼈攻击 - 针对上⾯的场景
 
• Man-in-the-MiddleAttack,简称“MITM攻击”
确实,在⽅案2/3/4中,客⼾端获取到公钥S之后,对客⼾端形成的对称秘钥X⽤服务端给客⼾端的公钥S进⾏加密,中间⼈即使窃取到了数据,此时中间⼈确实⽆法解出客⼾端形成的密钥X,因为只有服务器有私钥S'

但是中间⼈的攻击,如果在最开始握⼿协商的时候就进⾏了,那就不⼀定了,假设hacker已经成功成为中间⼈
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进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改,都是可以的

上⾯的攻击⽅案,同样适⽤于⽅案2,⽅案3
问题本质出在哪⾥了呢?客⼾端⽆法确定收到的含有公钥的数据报⽂,就是⽬标服务器发送过来的!
即:中间人可能会更换服务器传递的公钥信息!
解决方法:我们需要一个可靠的公钥,需要一个信得过的公钥信息!

引入证书

CA认证
服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端
公钥的权威性
这个 证书 可以理解成是⼀个结构化的字符串, ⾥⾯包含了以下信息:
证书发布机构
证书有效期
公钥
证书所有者
签名
......
需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对⼉就是⽤来在⽹络通信中进⾏明⽂加密以及数字签名的。
其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端⾃⼰保留,⽤来后续进⾏通信(其实主要就是⽤来交换对称秘钥)
形成CSR之后,后续就是向CA进⾏申请认证,不过⼀般认证过程很繁琐,⽹络各种提供证书申请的服务商,⼀般真的需要,直接找平台解决就⾏。

CSR文件

CSR文件通常指的是Certificate Signing Request(证书签名请求)文件,它是在公钥基础设施(PKI)中生成和使用的。CSR文件是用于申请数字证书(例如SSL/TLS证书)的一个重要步骤。以下是关于CSR文件的详细介绍:

1. **定义**:

   - CSR文件是一个包含公钥和其他身份信息的编码文本文件,它由申请证书的个人或组织创建。

   - CSR文件通常是用Base64编码的,并且包含一个摘要算法(如SHA-256)生成的数字签名。

2. **内容**:

   - **公钥**:CSR文件中包含的公钥将与相应的私钥一起使用,私钥必须保密地存储在服务器上。

   - **主体信息**:这包括申请证书的实体的详细信息,如组织名称、组织单位、通用名称(通常是网站的域名)、城市、州/省、国家/地区代码。

   - **签名**:CSR文件包含一个由生成CSR的私钥创建的数字签名,用于验证请求的完整性和真实性。

3. **生成**:

   - CSR文件通常使用服务器软件(如Apache、Nginx)或专门的加密工具(如OpenSSL)生成。

   - 生成CSR文件时,需要提供上述的主体信息,并且会同时生成一对公私钥。

4. **用途**:

   - CSR文件被发送到证书颁发机构(CA),CA会验证CSR中的信息,如果验证通过,CA会使用其私钥对CSR进行签名,生成数字证书。

   - 数字证书随后会被安装到服务器上,用于在客户端和服务器之间建立安全的加密连接。

5. **安全性**:

   - CSR文件本身不包含私钥,因此可以安全地通过互联网发送给CA。

   - 保护私钥是至关重要的,因为任何拥有私钥的人都可以解密通过公钥加密的数据。

在处理CSR文件时,需要谨慎以确保信息安全,并遵循正确的流程来申请和安装数字证书。

CA证书中的数据解析。

CA明文中的公钥:申请者提交(即服务器生成的密钥对中的公钥)服务器自持私钥!

证书的生成过程---借助数据签名

签名的形成是基于⾮对称加密算法的(因此对称加密无法实现签名!)签名的目的是为了防止数据被修改。
这就是数据签名的生成过程:1.先哈希得到摘要 2.再密钥加密得到签名
验证数据的可靠性:1.用公钥解密签名,得到散列值 2.用哈希得到摘要散列。如果二者一直,那么签名有效,即原数据没有被修改。
当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:
1. CA机构拥有⾮对称加密的私钥A和公钥A'(注意:这个密钥对是CA机构为了获取数据签名而生成的)
2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
3. 然后对数据摘要⽤CA私钥A'加密,得到数字签名S (这里提到的数据就是我们为了申请证书提交的数据,这个私钥只有CA有!)
服务端申请的证书明⽂和数字签名S 共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了
证书由数据签名和明文信息构成!数据签名就是为了验证明文是否有效!

对称加密不支持数字签名

对称加密不支持数字签名的主要原因是数字签名的实现需要满足以下两个关键特性,而对称加密无法满足这些特性:

1. **非对称性**:数字签名通常依赖于非对称加密算法,其中使用一对密钥:公钥和私钥。公钥用于验证签名,而私钥用于创建签名。这种非对称性确保了任何人都可以验证签名,但只有签名者的私钥才能创建有效的签名。

   - **原因**:在对称加密中,加密和解密使用的是同一个密钥,这意味着如果一个人能够加密信息,那么任何拥有相同密钥的人也能够解密。这不符合数字签名的要求,因为数字签名需要确保只有签名者才能创建签名,而任何人都能验证签名。

2. **不可伪造性**:数字签名的一个重要特性是它必须是不可伪造的。这意味着即使公开了验证签名的公钥,攻击者也无法伪造一个有效的签名。

   - **原因**:在对称加密中,由于加密和解密使用相同的密钥,如果密钥泄露,攻击者不仅能够解密信息,还能够伪造加密信息(即签名)。这破坏了数字签名的不可伪造性。

以下是更详细的原因:

- **密钥共享**:在对称加密中,密钥需要在通信双方之间共享。如果这个密钥被泄露,那么任何知道密钥的人都可以生成有效的“签名”,这使得签名失去了其唯一性和可信性。

- **缺乏身份验证**:对称加密不提供身份验证机制,因此无法证明签名是由特定的人或实体创建的。数字签名则需要这种身份验证来确保签名的可信度。

- **法律和合规性**:在许多法律和合规性框架中,数字签名需要满足特定的安全要求,这些要求通常只能通过非对称加密算法来实现。

因此,为了实现数字签名,通常使用非对称加密算法,如RSA、ECDSA(椭圆曲线数字签名算法)等,这些算法提供了必要的非对称性和安全性来支持数字签名。

⽅案 5 - ⾮对称加密 + 对称加密 + 证书认证

在客⼾端和服务器刚⼀建⽴连接的时候, 服务器给客⼾端返回⼀个 证书,证书包含了之前服务端的公钥, 也包含了⽹站的⾝份信息.
客户端只相信证书上的公钥,而不相信主动告知的其他任何形式的公钥。

加入证书的安全性体现在

公钥是从证书获取的。而中间人无法合理更改证书
客⼾端进⾏认证
当客⼾端获取到这个证书之后, 会对证书进⾏校验(防⽌证书是伪造的).
判定证书的有效期是否过期
判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到⼀个 hash 值(称为数
据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对⽐ hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的
查看浏览器的受信任证书发布机构
Chrome 浏览器, 点击右上⻆的
选择 "设置", 搜索 "证书管理" , 即可看到以下界⾯. (如果没有,在隐私设置和安全性->安全⾥⾯找找)
除了CA拥有颁发证书的能力,其他权威的机构也可以去颁发证书。

关于证书的准确性

中间⼈有没有可能篡改该证书?

篡改证书需要两方面入手:1.更改签名 2.更改明文。

1.更改签名:由于中间人没有CA私钥,即使是用公钥解密出数据指纹,那么用错误的私钥去再次生产签名后,得到的数据指纹的hash与错误签名被公钥解密的hash2也不一致!

2.更改明文:这个更不现实,我们访问对方的时候,证书往往是企业的相关属性(域名)信息,可以直接辨析,另外,更改明文也会导致得到的数据指纹hash不匹配!

中间⼈整个掉包证书?

因为中间⼈没有CA私钥,所以⽆法制作假的证书(为什么?)
所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包(CA机构会检测你申请证书时递交的信息是否合理
这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整
体掉包,客⼾端依旧能够识别出来(域名等信息也是客户端检测的标准之一)
永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的。

常⻅问题

为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?--重点是不可伪造

常⻅的摘要算法有: MD5 和 SHA 系列
以 MD5 为例, 我们不需要研究具体的计算签名的过程, 只需要了解 MD5 的特点:
定⻓: ⽆论多⻓的字符串, 计算出来的 MD5 值都是固定⻓度 (16字节版本或者32字节版本)
分散: 源字符串只要改变⼀点点, 最终得到的 MD5 值都会差别很⼤.
不可逆: 通过源字符串⽣成 MD5 很容易, 但是通过 MD5 还原成原串理论上是不可能的。
正因为 MD5 有这样的特性, 我们可以认为如果两个字符串的 MD5 值相同, 则认为这两个字符串相同.
理解判定证书篡改的过程: (这个过程就好⽐判定这个⾝份证是不是伪造的⾝份证)
假设我们的证书只是⼀个简单的字符串 hello, 对这个字符串计算hash值(⽐如md5), 结果为
BC4B2A76B9719D91
如果 hello 中有任意的字符被篡改了, ⽐如变成了 hella, 那么计算的 md5 值就会变化很⼤.
BDBD6F9CF51F2FD8
然后我们可以把这个字符串 hello 和 哈希值 BC4B2A76B9719D91 从服务器返回给客⼾端, 此时客⼾端如何验证 hello 是否是被篡改过?
那么就只要计算 hello 的哈希值, 看看是不是 BC4B2A76B9719D91 即可

为什么签名不直接对数据加密,⽽是要先hash形成摘要?

哈希算法可以缩⼩密⽂的⻓度,加快数字签名的验证签名的运算速度

如何成为中间⼈ 

ARP欺骗:在局域⽹中,hacker经过收到ARP Request⼴播包,能够偷听到其它节点的 (IP, MAC)
地址。例, ⿊客收到两个主机A, B的地址,告诉B (受害者) ,⾃⼰是A,使得B在发送给A 的数据包都被⿊客截取
ICMP攻击:由于ICMP协议中有重定向的报⽂类型,那么我们就可以伪造⼀个ICMP信息然后发送给局域⽹中的客⼾端,并伪装⾃⼰是⼀个更好的路由通路。从⽽导致⽬标所有的上⽹流量都会发送到我们指定的接⼝上,达到和ARP欺骗同样的效果。
假wifi && 假⽹站等--我们所有的数据流都要经过接入WiFi的路由器去转发!

完整流程

左侧都是客⼾端做的事情, 右侧都是服务器做的事情.
当我们输入一个url之后,S要先给C传递证书(获取证书之后,借助公钥将自己的R传递给S,S可以借助私钥解析R),然后后续采用C内部的R进行加密通信。

总结

HTTPS ⼯作过程中涉及到的密钥有三组.
第⼀组(⾮对称加密)--CA持有私钥: ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客⼾端请求是,返回携带签名的证书. 客⼾端通过这个公钥进⾏证书验证, 保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。
第⼆组(⾮对称加密)--Server持有私钥: ⽤于协商⽣成对称加密的密钥. 客⼾端⽤收到的CA证书中的公钥(是可被信任的)给随机⽣成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
第三组(对称加密)---C与S共同持有私钥,C传递给S: 客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub靶场——Log4j2

第一步:搭建靶场环境 #开启环境 cd vulhub/log4j/CVE-2021-44228 docker-compose up -d 来到网站首页 第二步:搭建一个dnslog平台上获取我们注入的效果 第三步:发现 /solr/admin/cores?action 这里有个参数可以传 我们可以看到留下了访问记录并且前面的参数被执行后给我们回…

使用idea创建JDK8的SpringBoot项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 使用idea创建JDK8的SpringBoot项目 前言我们经常在创建新的springboot项目&#xff0c;默认使用的是spring.io进行创建&#xff0c;但是它总是只会提供高版本的创建方式&…

U9多组织销退业务流程的总结

多组织销退业务流程&#xff0c;它的运行模式也是奇葩&#xff0c;确实不好理解其中的道理。用户实践中更是障碍重重&#xff0c;束手无策。左也不是右也不是&#xff0c;无路可走。 不能理解透彻造成的吧&#xff0c;所以做一个总结。 既有退货&#xff0c;必有出货单。从出货…

cudnn版本gpu架构

nvcc --help 可以看 --gpu-architecture 写到的支持的架构 NVIDIA 的 GPU 架构是按代次发布的&#xff0c;以下是这些架构的对应说明&#xff1a; NVIDIA Hopper: 这是 NVIDIA 于 2022 年推出的架构之一&#xff0c;面向高性能计算&#xff08;HPC&#xff09;和人工智能&…

Prompt格式到底有多重要?它竟然这样影响LLM函数调用能力(附提示词模版)

函数调用能力的关键地位 在当前大语言模型&#xff08;LLM&#xff09;的应用生态中&#xff0c;函数调用能力&#xff08;Function Calling&#xff09;已经成为一项不可或缺的核心能力。它使LLM能够通过调用外部API获取实时信息、操作第三方服务&#xff0c;从而将模型的语言…

有了chatgpt4o,普通人还需要学代码吗?

或许AI到达“终极智能”时&#xff0c;普通人就不用学代码了。不过现阶段或很长的一段时间内这还是不可能的。目前AI编程还是以辅助编程为主&#xff0c;普通人可以借助AI实现一些简单的编程。 其实这个问题可以扩大到AI编程的出现对编程行业或程序员职业影响的问题。就这个问…

CE8.【C++ Cont】练习题组6

目录 1.矩阵转置 题目描述 输入格式 输出格式 输入输出样例 错误代码 提交结果 正确代码 提交结果 2.图像相似度 题目描述 输入格式 输出格式 输入输出样例 代码 提交结果 3. 计算矩阵边缘元素之和 题目描述 输入格式 输出格式 输入输出样例 说明/提示 …

哪个网页版思维导图好用?这5款高效软件不容错过!

眼下虽然每个人的电脑硬盘越来越大&#xff0c;但很多人还是保留着“能不装软件就不装”的理念&#xff0c;在选择办公软件时&#xff0c;会更倾向于选用推出了网页版的软件&#xff0c;这对思维导图来说也不例外。 那具体到思维导图网页版&#xff0c;有哪些软件值得推荐&…

【双指针算法】--复写零

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…

石岩基督教福音堂

周末娃&#xff0c;娃的阿婆和我一起去石岩基督教福音堂做礼拜。 这是我第一次进入石岩的教堂。教堂很高。应该有3,4层楼高。 这周末做礼拜的人很多一楼人满了&#xff0c;阿婆去二楼做礼拜&#xff0c;娃和我去三楼的儿童室。很多家长楼下做礼拜&#xff0c;小朋友被安排三楼…

Flutter 异步编程简述

1、isolate 机制 1.1 基本使用 Dart 是基于单线程模型的语言。但是在开发当中我们经常会进行耗时操作比如网络请求&#xff0c;这种耗时操作会堵塞我们的代码。因此 Dart 也有并发机制 —— isolate。APP 的启动入口main函数就是一个类似 Android 主线程的一个主 isolate。与…

IDEA用jformdesigner插件做管理系统MVC架构

在 IntelliJ IDEA 中结合 JFormDesigner 插件&#xff0c;通过 Swing 框架实现一个管理系统的 MVC 架构是一种经典的开发方式。以下是具体的步骤和实现思路&#xff0c;包含从项目创建到 MVC 架构的核心代码实现。 1. 项目结构设计 为了清晰的 MVC 分层架构&#xff0c;建议按…

Linux内核调度优先级详解:如何优化你的系统性能

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 进程优先级调度是操作系统中的一种调度机制&#xff0c;其核心是为每个进程分配一个 优先级&#xff08;Priority&#xff09;&#xff0c;然后根据优先级的高低决定进程执行的顺序和时间。这种机制确保了关…

Axure RP9 的详细安装及Axure入门应用

文章目录 一、Axure 是什么?二、Axure 的应用场景三、Axure 安装1. 下载安装2. 汉化授权 附&#xff1a;下载链接 一、Axure 是什么? 1、Axure 是一种强大的原型设计工具&#xff0c;它可以帮助设计师和产品经理快速创建交互式的、高保真度的原型&#xff0c;并进行用户体验…

pro文件转换为CMakeLists.txt文件,QT官方工具使用教程

某些情况需要使用cmake&#xff0c;如果手动将QT的pro文件转换成CMakeLists.txt&#xff0c;简短一点的pro还好&#xff0c;如果是比较复杂的pro&#xff0c;手动转换的时候需要长时间的debug&#xff0c;本人深有感受。 工具介绍&#xff1a; qmake2cmake工具创建一个CMakeL…

CDN信息收集(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

深度学习实战车辆目标跟踪【bytetrack/deepsort】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…

windows使用zip包安装MySQL

windows通过zip包安装MySQL windows通过zip包安装MySQL下载MySQL的zip安装包创建安装目录和数据目录解压zip安装包创建配置目录 etc 和 配置文件 my.ini安装MySQL进入解压后的bin目录执行命令初始化执行命令安装 验证安装查看服务已安装 启动MySQL查看服务运行情况修改密码创建…

Dots 常用操作

游戏中有多个蚂蚁群落&#xff0c;每个蚂蚁属于一个群落&#xff0c;如何设计数据结构&#xff1f; 方法1&#xff1a;为蚂蚁组件添加一个属性 ID&#xff0c;会造成逻辑中大量分支语句&#xff0c;如果分支语句逻辑不平衡可能带来 Job 调度问题&#xff0c;每个蚂蚁会有一份蚂…

Django 后端数据传给前端

Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb()Step7 简单创建两列…