文章目录
- 前言
- 一、HTTPS是什么
- 二、HTTPS加密方法
- 三、HTTPS加密流程
- 对称加密
- 非对称加密
- 中间人攻击
- 证书
- 总结
前言
本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习,共同进步。这篇文章能够帮助到你的话,劳请大家点赞转发支持一下!
一、HTTPS是什么
HTTPS 也是一个应用层协议, 是在 HTTP 协议的基础上引入了一个加密层。
HTTP 协议内容都是按照文本的方式明文传输的,所以一些别有用心的黑客等,就可以通过一些手段来截获HTTP请求,从而来窃取用户的隐私信息,甚至对内容进行篡改后,再进行发送至原目的地。
在互联网上, 明文传输是比较危险的事情!!!
HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全。
二、HTTPS加密方法
加密就是把 明文 (要传输的信息)进行一系列变换,生成 密文 。
解密就是把 密文 再进行一系列变换,还原成 明文 。
在这个加密和解密的过程中,往往需要 一个或者多个中间的数据 ,辅助进行这个过程,这样的数据称为 密钥 。
HTTPS的加密方法:
发送方通过密钥将明文转换成密文,进行发送,
接收方收到数据再通过密钥将密文转换成明文。
看似简单的过程,而这其中HTTPS为了保证信息的安全又与窃取篡改者进行了多次博弈,下面的加密流程揭示其中的博弈过程。
三、HTTPS加密流程
既然要保证数据安全, 就需要对数据进行 “加密”。
网络传输中不再直接传输明文了,而是加密之后的 “密文”。
你以为进行加密后,就能万事无忧了? 不正所谓道高一尺魔高一丈,黑客也在想尽办法破解。
世界上没有绝对的安全,只有当破解成本超过了数据本身的价值,那这些数据就安全了。正所谓亏本的买卖没人做。
加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密 。
对称加密
对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文。
此时就算黑客入侵路由器,截获了密文,他没有密钥解密,因此数据仍是安全的。
但是实际情况可不是这样的。
一个服务器会同时给N个客户端提供服务。 那么所有客户端都用同一个密钥进行加密吗?
如果这样,黑客直接注册一个客户端,就能拿到密钥,就可以窃取篡改所有客户端的信息。
所以是每个客户端都会自己生成一个密钥,然后再将密钥与通过这个密钥加密好的密文一起发送给服务器,服务器拿到密钥和密文,再通过这把密钥解密密文。
如果密钥进行明文传输的话,那前面的加密操作就没有意义了,因此密钥也需要加密。
且密钥的加密不能再使用对称加密了,因为这个密钥就是为了解决对称加密的安全问题。这里就使用非对称加密解决。
非对称加密
非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”。
有以下两种方法:
公钥进行加密操作,私钥进行解密操作。
私钥进行加密操作,公钥进行解密操作。
须知
1️⃣公钥与私钥一个用来加密,另一个用来解密,可以公钥加密,私钥解密;也可以私钥加密,公钥解密。
2️⃣一个钥匙进行加密,那么这个钥匙就无法将密文解密成明文举例:我用公钥对数据进行加密,此时这个密文使用公钥就解不出来,只有私钥可以正确解密。
形象来说就是,公钥与私钥,一个充当锁的角色,一个充当钥匙的角色。所以无法同时做到又能加密又能解密。
3️⃣公钥私钥就是两把 “钥匙” , 公布出去的叫做公钥,自己留下不告诉别人的叫做私钥。
4️⃣公钥和私钥是配对的,最大的缺点就是运算速度非常慢,比对称加密要慢很多。
图解
共涉及到两个个密钥:
服务器的:公钥:pubKey;私钥:priKey
前提:服务器将公钥告诉所有客户端,自己保留私钥。
用来加密的钥匙:key
私钥:priKey(privateKey);公钥pubKey(publicKey)。
你以为这就安全了吗??
魔高一丈的攻击要来了!!!
中间人攻击
攻击来啦!
图解
共涉及到四个密钥:
服务器的:公钥:pubKey;私钥:priKey
黑客的:公钥:pubKey1;私钥:priKey1
1️⃣客户端先向服务器申请公钥,服务器发送(明文传输)公钥pubKey给客户端
2️⃣黑客截取到公钥,黑客记录这个pubKey,并自己生成了一对非对称密钥,pubKey1与priKey1。
3️⃣然后将pubKey1发送给客户端。
4️⃣ 客户端拿到公钥,但是他并不知道这个公钥被篡改了,因此仍然使用pubKey1对key进行加密,并发送。
5️⃣此时黑客再次截取客户端发送的数据,使用priKey1将key解密出来,然后再用key将密文解密得到数据。
6️⃣然后再将数据篡改后,用key加密,再用之前记录的pubKey对key加密,然后再发送给服务器。
上述的中间人攻击,就对数据神不知鬼不觉的完成了截取篡改。
那么HTTPS为了应对中间人攻击,就实施了 “证书” 这一方案
证书
如何破解 “中间人攻击” 呢?
"中间人攻击"的原理
中间人攻击主要就是通过截获服务器发送给客户端的公钥,然后将自己生成的公钥以相同的数据格式发送给客户端,让客户端以为自己拿到了服务器的公钥。
所以破解"中间人攻击"的关键就是服务器的公钥可以安全送达。
而 “证书” 就可以让客户端验证服务器传输过来的公钥有没有被篡改。
证书是什么
证书可以理解成是一个Java中的对象,这个对象中包含许多信息(成员变量)以字符串的形式呈现。
证书包含的信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名:签名就是通过算法将整个证书计算出的一个哈希值。可以把签名理解为一个校验和
- …等等信息
搭建一个 HTTPS 网站要在相关权威机构先申请一个证书,要向权威机构提供一些资料(包括服务器要发送给客户端的公钥),申请下来的 证书的信息中就包括公钥 ,证书中有一个最关键的核心信息: 签名 !
这个 签名由权威机构先针对证书计算出一个值,然后权威机构再用自己的私钥对这个签名进行加密 。
电脑操作系统内置了 与权威机构私钥成对的公钥 。
此时服务器就不会向客户端发送公钥,而是将整个证书发送给客户端。
而证书仍然采用明文传输,其中只有签名这个属性进行了加密!
图解
共涉及到四个密钥:
服务器的:公钥:pubKey;私钥:priKey
黑客的:公钥:pubKey1;私钥:priKey1
如果黑客自己 伪造一个证书发给客户端 或者 用系统内置的公钥解密并篡改了签名 ,但是黑客没有权威机构的私钥,无法对签名进行加密,那么系统内置的公钥就无法正确解密签名,就更不会信任这个证书了。
当然,客户端拿到证书后不止是会对签名进行校验。
当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的,或被篡改过)
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
- 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1,然后计算整个证书的 hash 值,设为 hash2, 对比 hash1 和 hash2 是否相等,如果相等,则说明证书是没有被篡改过的 。
此时就保证了数据的安全!
黑客将证书中的公钥替换成自己的,客户端可以识别,直接报错,就不会再向外发送数据。
如果黑客不替换,那么他也无法解密出数据,更别说篡改数据了。
证书的目的就是为了保护服务器的公钥可以安全送达客户端,而不被篡改。
以上的 “对称加密”,“非对称加密”,“证书”,都是SSL协议中的内容。
而HTTPS协议 = HTTP协议 + SSL协议。
总结
以上就是今天要讲的内容,本文介绍了HTTPS的是如何保证数据安全传输,以及如何应对中间人攻击!
路漫漫不止修身,也养性。