1.HTTP的问题
2.预备知识
2.1.HTTPS是什么
https(全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,是 HTTP 的安全版本。
- Https是身披SSL/TLS外壳的HTTP协议,它并非一个新的协议而是在HTTP的基础上新增了安全层(SSL/TLS),HTTPS先和安全层通信,然后安全层和TCP层通信。
- HTTPS 经由 HTTP 进行通信,但是在 HTTP 的基础上引入了一个加密层,使用 SSL/TLS 来加密数据包。
- HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
- HTTPS 默认工作在 TCP 协议443端口(HTTP默认80端口)
既然要保证数据安全,就需要进行“加密”,即网络传输中不再直接传输明文,而是加密之后的“密文”。
应用层就是我们自己啊,我们自己去加密吗?别开玩笑了,等下偷鸡不成蚀把米了。
为了更好的加密,就在应用层和传输层之间加了一个安全层,使用 SSL/TLS 来加密数据包。
以前HTTP是应用层将HTTP响应/请求直接传递给传输层,现在变成了HTTPS,先将应用层将HTTP响应/请求传递给SSL&TLS这个过渡层,然后再传递给传输层,这就是HTTPS和HTTP的区别。
2.2.加密和解密
2.2.1.什么是加密和解密
首先需要简单了解一下 加密与解密 的概念
- 加密:把明文经过一系列变换,形成密文
- 解密:把密文经过一系列变换,还原成明文
在加密与解密的过程中需要一个或者多个辅助数据,我们将其称为 「密钥」
加密示例:假设我们要加密的消息(明文)是 "HELLO",并且我们选择的密钥是3(意味着字母表中的每个字母向后移动3位)。
- H -> K (因为H向后移3位是K)
- E -> H (E向后移3位是H)
- L -> O (L向后移3位是O,注意这里超过了Z则循环回A)
- L -> O (同上)
- O -> R (O向后移3位是R)
所以,经过加密后的密文是 "KHOOR"。
解密示例:现在,如果我们收到密文 "KHOOR" 并知道密钥是3,我们可以通过相反的操作来解密,即将每个字母向前移3位来还原明文。
- K -> H (K向前移3位是H)
- H -> E (H向前移3位是E)
- O -> L (O向前移3位是L)
- O -> L (同上)
- R -> O (R向前移3位是O)
这样,我们就成功地将密文 "KHOOR" 还原成了明文 "HELLO"。在这个例子中,密钥就是那个固定的数字3,它在加密和解密过程中起到了至关重要的作用,确保只有拥有密钥的人才能正确解码信息。
2.2.2.为什么要加密解码
- 为什么需要加密?
首先是因为信息都是以 明文 的形式传输的,难免会遇到坏人收集个人信息,其次是可能存在运营商劫持等安全问题,个人信息容易泄漏,所以才需要对信息加密,保护隐私
我们举个例子来
2.2.3.常用的加密方式
常见的加密方式有以下两种:
- 对称加密算法在加密和解密过程中使用相同的密钥,速度较快,但需要事先共享密钥,导致密钥管理的复杂性。
- 非对称加密算法使用不同的密钥进行加密和解密,提供更好的安全性和身份验证,但速度较慢。
一种常见的方式是在通信开始时使用非对称加密算法来安全地交换对称密钥,然后使用对称加密算法进行实际的数据传输。 我们下面再讲。
3.HTTPS的工作过程探究
我们自己给HTTP逐步设计一套安全方案,设计完一套,逐个分析各个方案的不足,最后得出最完美的,那个就和我们的HTTPS差不多了
最开始的问题是HTTP对于报文是明文传递的。我们需要对其进行加密
3.1.加密方案的选定
3.2.加密方案的缺陷
我们上面得到了最接近答案的方案四,在方案4中,客户端获取到公钥S之后,对客⼾端形成的对称秘钥X⽤服务端给客⼾端的公钥 S进行加密,中间⼈即使窃取到了数据,此时中间⼈确实⽆法解出客户端形成的密钥X,因为只有服务器有私钥S' 。
但是中间人的攻击,如果在最开始握⼿协商的时候就进⾏了,方案四那就不⼀定安全了.
- 上⾯的攻击方案,同样适⽤于方案2,方案3 问题本质出在哪⾥了呢?
客户端⽆法确定收到的含有公钥的数据报⽂,就是目标服务器发送过来的!
被攻击的核心原因:客户端无法验证公钥的合法性(客户端不认识服务器),此时就需要一个公平公正的第三方机构来进行认证,确保客户端所连接的服务器是合法的
3.3.引入证书
3.3.1.摘要算法
摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。
你可以把摘要算法近似地理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。
换一个角度,也可以把摘要算法理解成特殊的“单向”加密算法,它只有算法,没有密钥,加密后的数据无法解密,不能从摘要逆推出原文。
摘要算法实际上是把数据从一个“大空间”映射到了“小空间”,所以就存在“冲突”(collision,也叫碰撞)的可能性,就如同现实中的指纹一样,可能会有两份不同的原文对应相同的摘要。好的摘要算法必须能够“抵抗冲突”,让这种可能性尽量地小。
3.3.2.数字摘要
数字摘要 又称为 数字指纹,指通过哈希函数对信息进行运算后生成的一串定长字符串,具有很强的唯一性,数字摘要 并不能加密,而是用于快速判断原始内容是否被修改
- ⭐数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被窜改。
- ⭐摘要常见算法:有MD5、SHA1、 SHA256、SHA512等, 算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
- ⭐摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。
摘要算法保证了“数字摘要”和原文是完全等价的。所以,我们只要在原文后附上它的摘要,就能够保证数据的完整性。
比如,你发了条消息:“转账 1000 元”,然后再加上一个 SHA-2 的摘要。网站收到后也计算一下消息的摘要,把这两份“指纹”做个对比,如果一致,就说明消息是完整可信的,没有被修改。
如果黑客在中间哪怕改动了一个标点符号,摘要也会完全不同,网站计算比对就会发现消息被窜改,是不可信的。
为什么不直接对原始内容进行加密后得到 数字签名?
- 因为在经过哈希函数后,会得到一串定长且唯一的字符串,更适合进行加密计算
3.3.4.CA证书
下面是申请CA证书的业务流程:
- 申请公开密钥:服务器运营人员向数字证书认证机构提出公开密钥的申请。
- 验证身份:数字证书认证机构会验证申请者的身份,确保他们是他们声称的那个人或组织。
- 数字签名:一旦身份得到确认,数字证书认证机构就会对申请的公钥进行数字签名。这个签名保证了公钥的真实性和完整性。
- 颁发证书:数字证书认证机构将签名的公钥放入一个公钥证书中,并将这个证书颁发给服务器。
- 发送证书:服务器将这份由数字证书认证机构颁发的公钥证书发送给客户端,以便进行公开密钥加密的通信。
我们看看数字证书通常包含了:
- 服务器的非对称密钥中的公钥;
- 持有者信息;
- 证书认证机构(CA)的信息;
- CA 对这份文件的数字签名及使用的算法;
- 证书有效期;
- 还有一些其他额外信息;
也就是说,证书的工作过程如下
3.4.方案五——HTTPS真容
学习完上面的知识,我们终于可以得到最终方案了。
我们的方案5(「非对称式加密」+「对称式加密」+「CA证书」)是在方案4的基础上面增加的CA证书这个环节。我们的方案5也刚好就是HTTPS锁采取的方案。
HTTPS共作过程中涉及到的密钥有三组:
- 第⼀组(非对称加密):用于校验证书是否被篡改。服务器持有私钥(私钥在形成CSR文件与申请证书时获得),客户端持有公钥(操作系统包含了可信任的CA认证机构有哪些,同时持有对应的公钥)。服务器在客⼾端请求时,发送携带签名的证书。客户端通过这个公钥进行证书验证,保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。
- 第二组(非对称加密):用于协商生成对称加密的密钥。客户端用收到的CA证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥。
- 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。其实⼀切的关键都是围绕这个对称加密的密钥。其他的机制都是辅助这个密钥工作的。
其实⼀切的关键都是围绕这个对称加密的密钥B,其他的机制都是辅助这个密钥工作的。
- 第⼆组非对称加密的密钥A2是为了让客户端把这个对称密钥B传给服务器
- 第⼀组非对称加密的CA密钥是为了让客户端拿到第⼆组非对称加密的公钥——CA机构的公钥。
上面就是HTTPS的做法
3.5.HTTPS和HTTP的区别
Https是身披SSL/TLS外壳的HTTP协议,它并非一个新的协议而是在HTTP的基础上新增了安全层(SSL/TLS),HTTPS先和安全层通信,然后安全层和TCP层通信。
HTTPS和HTTP的区别主要在于安全性和加密方式:
- 建立连接时:HTTPS比HTTP多了TLS的握手过程。当使用HTTPS时,客户端和服务器在建立连接之前,会先进行一个叫做TLS握手的过程。这个过程包括客户端向服务器索要并验证服务器的公钥,确保服务器是它声称的那一个。然后,双方会协商产生一个会话秘钥,这个秘钥用来加密双方之间的通信内容。
- 传输内容时:HTTPS会把数据进行加密,通常是使用对称加密。这意味着在传输过程中,数据是以加密的形式传输的,这样即使数据在传输过程中被截获,攻击者也无法理解数据的内容。
- HTTP协议是一种以字符串明文传输的简单的请求-响应协议,在传输层基于TCP协议实现。HTTP协议默认使用80端口。HTTPS协议是一种对HTTP加密后的协议,主要是多了身份验证以及加密传输等功能,HTTPS协议默认使用443端口。
总结来说,HTTPS通过TLS协议提供了一种加密的通信方式,可以防止数据在传输过程中被截获和窃取,而HTTP则是明文传输,没有加密。因此,HTTPS比HTTP更加安全。