🔍 开发者资源导航 🔍 |
---|
🏷️ 博客主页: 个人主页 |
📚 专栏订阅: JavaEE全栈专栏 |
简介
HTTPS(超文本传输安全协议)是互联网上保护数据传输安全的核心技术。它通过在传统HTTP协议上增加SSL/TLS加密层,实现了三大核心安全功能:
- 加密传输 - 所有通信内容经过高强度加密,防止数据在传输过程中被窃听
- 身份认证 - 通过数字证书验证网站真实身份,有效防范钓鱼网站
- 数据完整 - 采用消息认证码(MAC)确保传输内容不被篡改
现代HTTPS技术已发展至TLS 1.3版本,相比早期协议在安全性和性能上都有显著提升。目前所有主流浏览器都已强制要求网站使用HTTPS,没有安全加密的网站会被明确标记为"不安全"。
作为网站所有者,部署HTTPS不仅能保护用户隐私,还是获得搜索引擎良好排名的基础条件。随着Let’s Encrypt等免费证书服务的普及,HTTPS已成为每个网站的标配安全措施。
对称加密
在https中,我们使用“密钥”对我们的信息进行加锁以及解锁,而对称加密的“钥匙”和“锁“”都是同一个“密钥”😇。
什么是密钥呢?
密钥是现代信息安全体系的核心要素,是加密与解密过程中使用的关键参数。简单来说,密钥就像是一把"数字钥匙",用于锁定(加密)和解锁(解密)信息,而我们的日常见到的密钥都是字符串形式的。
例如:tJY5eZq7XwV8kO3iP1nB2sL9mQ6cR4fD0vU7yI2aHjKpGxNlWoE4bC5dM
数据加密过程
- 服务器生成一个密钥,然后发送给客户端,之后和客户端的通信通过该秘钥进行传输。
- 客户端对数据使用该密钥进行加密,然后发送给服务器。
- 服务器拿到数据后使用密钥进行解密。
上述的过程虽然可以进行加密传输,但是它有一个非常严重的bug!😈
服务器要给很多客户端提供服务,那么每一个客户端的密钥都不同吗?这肯定不现实!但是如果我们的密钥都相同,那么黑客就可以轻而易举拿到这个秘钥,后续的加密操作就没意义了。
既然问题出在密钥的传输上,那么我们如果再对密钥进行加密呢?
如果我们针对密钥再加密一次,就需要生成一对新的密钥key1,但是这个新的秘钥传输怎么保证安全?那就再加密一次使用密钥key2,再怎么保证安全?再加密....😬
但是这样无论套多少层,都肯定有一层需要明文传输。
因此光靠对称加密我们无法保证数据的安全,因此我们引入另一种加密方式:非对称加密。
非对称加密
非对称加密,就是指加密和解密用到的密钥不是同一个,他有两个密钥,一个是公钥另一个是私钥,公钥是对外公开的,私钥是只有自己知道的😋。
在非对称加密过程中,公钥和私钥是成对生成的,使用公钥加密的数据只有私钥可以解开,使用私钥加密的数据只能用公钥来解开。因此使用公钥加密的数据,只要牢牢保密住私钥,就可以保证信息更难被破解👊。
公钥加密、私钥解密的可行性依赖于数学难题(如大数分解、离散对数)的单向性。私钥是公钥的数学逆元,且无法通过公钥反向推导。
数据传输过程
- 客户端根据公钥加密数据,发送给服务器。
- 服务器根据自己的私钥解密数据。
- 因为其他人没有私钥,即使得到数据也无法解密。
非对称加密虽然比对称加密安全,但是有一个很大的缺点,非对称加密的开销很大,运算也很慢。因此往往使用如下的流程来保证安全以及效率:
- 客户端先随机生成一个对称密钥,按照公钥传输发送对称密钥。
- 务端按照私钥进行解析,得到对称密钥。
- 得到对称密钥后,之后的传输都使用对称加密进行传输。
黑客虽然得不到服务器的私钥,但是依旧可以通过其他途径来截取数据,例如使用中间人攻击。
中间人攻击
中间人攻击是指,黑客不直接入侵服务器或者客户端,而是通过入侵传输过程中的设备来截取数据,例如路由器等。
其入侵流程如下:
- 被入侵的路由器自己生成一对公钥和私钥。
- 客户端向服务器发送请求询问公钥。
- 路由器将自己生成的公钥传输给客户端,并保存服务器的公钥。
- 客户端之后发送的对称密钥使用路由器的公钥加密后,会被路由器解密,路由器重新加密后转发给服务器。
- 路由器捕获对称密钥后,后续所有的传输都可以被解密。
因为被入侵的是一个路由器,客户端无法识别出公钥是真是假,只能选择相信。
通过篡改公钥,黑客可以获取到双方通信的对称密钥,因此也可以轻松获取到之后的通信信息。
数字证书
中间人攻击的关键在于客户端无法区分收到的公钥是否是服务器真实的,因此我们可以引入校验机制来判断,数字证书是由第三方认证机构发布的虚拟证书,在传输数据时先判断证书是否正确,来判断此次的传输是否安全👮。
数字证书包含信息:
- 证书颁发机构
- 证书有效期
- 服务器公钥
- 服务器域名
- 数字签名
数字签名:被加密的校验和,用来验证身份,是校验的最关键部分,将数字证书的其他信息(有效期,域名....)通过一个固定的公式得出来的一个数字。当输入信息相同时得到的结果是相同的,不同时大概率是输入不同,因此如果校验和不相同则可以认为其中的某些信息被篡改了🧐。
校验流程
- 客户端收到证书,针对证书的其他字段使用同样的方法再次计算数字签名。
- 使用第三方机构的公钥对证书的签名进行解密。
- 比较这两次的数字签名,如果不同说明证书无效,被篡改了。
和其他加密不同的是,数字签名是使用第三方机构的私钥进行加密的,其他人可以都可以获取到公钥进行解密,但是这个公钥是存储在自己的电脑上的,每个操作系统都内置了主流的机构的公钥,避免这个公钥会被其他人篡改。
假如你是一个黑客,你为了绕开证书你使用了如下的方法....💀
1.修改了证书的公钥改为自己的公钥
你想到了之前使用的中间人攻击方法,修改了证书中的公钥,但是客户端对证书的字段重新计算后,发现校验不符合,寄!🤡
2. 修改校验和
聪明的你又想到了数字签名的公钥既然是每个人都可以获取到的,那么作为黑客的你也可以获取到🤓,因此你对数字签名进行了解密,修改公钥后重新计算一遍校验和,并使用自己的密钥进行加密,但是你没有想到的是,私钥和公钥是一一对应的,你因为没有正确的私钥,使用你的密钥加密的签名无法被客户端解密,你不出意外的被发现了😭。
3.替换掉整个证书
不打算放弃的你又想出了另一个方法:既然证书里面无法修改,那我直接把整个证书替换成自己的证书不就行了呗,你满心期待的尝试了一下,但是没想到的是每个证书的域名是唯一的,你的证书的域名不符!直接被发现了😅。
4.入侵认证机构
开玩笑呢,你要是有这本事你还用得着干这个?
上述的所有过程只是为了验证公钥是合法的,只有公钥是合法的,后续才可以安全传递对称密钥,因此黑客最多只能看到你们的数字签名是什么,业务数据是看不到一点的~