目录
一.HTTPS是什么?
HTTPS的介绍
HTTPS产生的背景
二.https的安全机制
加密是什么
如何加密
客户端如何获取公钥
总结
🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
🎥 本文由 tq02 原创,首发于 CSDN🙉
🎄 本章讲解内容:HTTPS的学习在学习本文之前,需要学习http的详细知识,才能明白什么是https,以及它的作用。
http详解链接:http://t.csdnimg.cn/TnKcz
🎥学习专栏: C语言 JavaSE MySQL基础 多线程学习
一.HTTPS是什么?
HTTPS的介绍
https是应用层协议. 是在 HTTP 协议的基础上引入了一个加密层。而为什么需要出现加密层呢?
原因:HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.
HTTPS产生的背景
当时主流使用HTTP,但是发生了一件事情,导致HTTPS的产生。运营商劫持
什么是运营商劫持呢?
就是当你在浏览器里下载软件时,某移、某通和某信的的网络设备(路由器, 交换机等)会接收到你网络的网络传输的任何的数据包,运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。
简单而言,当你需要下载酷狗音乐时,给服务器发送HTTP请求,但是被运营商劫持了,而且被发现了你要下载的内容,而它却给你修改为了QQ音乐的下载链接。
运营商这样的目的:为了流量,为了万物之源----钱。
思考一下:http传输数据竟然如此容易会被发现,那么对于黑客而言,也可以窃取用户隐私信息, 或者篡改内容。因此很不安全!!!
二.https的安全机制
由于http的传输等方面很棒,但是如果因为不安全而放弃重新研发,那么成本太高,因此我们可以通过在HTTP,在其本身上下手,在其基础上进行加密操作!
加密是什么
http传输的是明文,加密就是把明文进行一系列操作,生成密文
解密就是把 密文 再进行一系列变换, 还原成 明文 .
在这个加密和解密的过程中 , 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为 密 钥
如何加密
加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密
对称加密:对称加密其实就是通过同一个 " 密钥 " , 把明文加密成密文 , 并且也能把密文解密成明文 .
举例 简单对称加密---按位异或 :
明文 a = 1234, 密钥 key = 8888;加密 a ^ key 得到的密文 b 为 9834.针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234.注: 按位异或只是最简单的对称加密. HTTPS 中并不是使用按位异或.
而使用了对称加密,即使数据被截获了,黑客不会知道密钥是什么!但是实际上并没有那么简单!
原因:每个客户端的密钥必须是不同的,不然大部分人用一样的,那么相同密钥扩散太多,黑客也能拿到。而服务器真的可以维护每一个客户端和密钥之间的关联关系吗?不能。
因此就出现了一种,双方先沟通,协商密钥是什么,在进行密钥传输的方式。
如上图的形式,但是傻子也看得出来,第一次就这样传输,黑客不就知道了吗?因此为了争对第一次的传输,我们引入非对称加密。
非对称加密非对称加密要用到两个密钥, 一个叫做 " 公钥 ", 一个叫做 " 私钥 "公钥和私钥是配对的 . 最大的缺点就是 运算速度非常慢 ,比对称加密要慢很多 .
通过公钥对明文加密 , 变成密文 通过私钥对密文解密, 变成明文注:也可以反着使用。
用法:A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A 和 B 提前做出约定: B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来 开锁取文件. 在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有. 持有私钥的人才能解密.
- 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
- 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥
- 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据.
- 后续客户端和服务器的通信都只用对称加密即可
客户端如何获取公钥
有没有想过,如果一开始就有公钥,那为什么还需要密钥呢?不就是应该客户端一个密钥吗?因此,我们需要明白公钥如何获取!
获取公钥:
在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书(包含了刚才的公钥, 也包含了网站的身份信息. )
客户端取得证书,对证书进行校验,防止伪造的可能。校验手段:
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
- 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.
证书含有以下信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
也就是说,靠证书获取服务器赠的公钥!!!
总结
HTTPS就是HTTP的基础上加密了,更加安全,不会轻易被黑客盗取信息。而加密方式:使用了密钥加密。
工作流程分三步:
-
第一组 ( 非对称加密 ) : 用于校验证书是否被篡改 . 服务器持有私钥 ( 私钥在注册证书时获得 ), 客户端持有公 钥( 操作系统包含了可信任的 CA 认证机构有哪些 , 同时持有对应的公钥 ). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名 , 从而校验证书内容是否是篡改过
-
第二组 ( 非对称加密 ): 用于协商生成对称加密的密钥 . 服务器生成这组 私钥 - 公钥 对 , 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密 , 传输给服务器 , 服务器通过私钥解密获取到对称加密密钥.
-
第三组 ( 对称加密 ): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密 .