[TCP/IP] 应用层代表协议--HTTPS协议介绍:...
HTTP
协议. HTTP
协议在网络中是以明文的形式传输的. 无论是GET
还是POST
方法都是不安全的.-
HTTP
协议以明文的形式传输数据, 缺乏对信息的保护.如果在网络中传输数据以明文的形式传输, 网络中的任何人都可以轻松的获取数据中携带的敏感信息. 信息太容易泄露了
其次, 由于对信息没有保护措施. 任何人也都有可能篡改发送的信息.
想象一下, 如果你在和喜欢的人 在网上表白的时候, 有人把你发送的消息在网络中改了… 😱😱😱
HTTP
的不安全, 所以才出现了HTTPS
协议.HTTPS
什么是HTTPS
HTTPS
协议也是一种应用层的协议.TPC/IP
四层协议模型来看:HTTP
和HTTPS
不同的是:HTTPS
协议传输数据, 数据会经过加密之后再进行传输. 这一层加密层就是SSL/TLS
两个加密协议.HTTPS
就是通过在HTTP
协议之上添加SSL/TLS
加密层来实现的.HTTPS
传输数据, 在应用层和传输层之间时:什么是加密
-
加密 就是 把 明文(需要传输的数据) 通过一系列的转换, 生成 密文
比如要传输
123
, 通过把123
+456
得到579
(当然不可能这么简单) -
解密 就是 把 密文 再通过一系列的转换, 生成原本的 明文
579
-456
得到123
-
在 加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥. 上面那个再简单不过的例子,
456
就是密钥
在举一个例子:
不知道大家有没有看过《剑来》这本小说. 这本小说前两卷有一段剧情是这样的: 陈平安(主角)在护送一群孩子去远方的一个书院求学. 但在路上发生了一件事, 队伍中 在镇子上稍有名望的家里的小姐收到了一些家书. 其中一封家书实际不是给这位小姐看的, 而是给身边的丫鬟看的. 那封家书洋洋洒洒几千字, 但只有那几个字使用楷书写的: “大骊柱国姓氏,
陈
氏嫡长孙,杀
马贼,太平
火,报平安
,得诰命
”, 用楷书写的7个字正是:杀陈平安得诰命
这就算是一种加密. 而密钥 则是懂楷书
为什么要加密
HTTP
劫持HTTP
协议以明文的形式传输数据. 在下载软件的时候, 如果运营商发现 服务器响应回来的数据是某个软件(可能是特定的软件)的下载链接, 那运营商可能就会劫持此响应, 然后把响应数据设置为另外一个软件的下载链接. 然后用户下载的就是其他软件中间人 泛指 在通信的两个节点之间插入自己的设备或程序,以窃取、篡改或监控通信数据的攻击者
HTTPS
协议来传输数据.常见的加密方式
HTTPS
是什么, 加密是什么, 为什么加密.1. 对称加密
- 算法公开
- 计算量小
- 加密速度快
- 加密效率高
DES
、3DES
、AES
、TDEA
、Blowfish
、RC2
等举个简单的对称加密的例子: 按位异或
设 明文
a = 1234
, 密钥key = 8888
加密
a ^ key
得到的密文b = 9834
然后针对密文
9834
再次进行运算b ^ key
, 得到的就是原来的明文1234
2. 非对称加密
数据指纹(数据摘要)**
MD5(16字节)
SHA1(20字节)
SHA256(32字节)
SHA512(64字节)
数据指纹有非常多的应用场景. 比如:
平常向网盘 上传资源的时候, 有些资源是可以秒传的. 为什么可以秒传呢? 实际就是因为 你上传的资源 其实已经在网盘的服务器中存储着了(可能别人上传过). 此时, 就不需要进行上传, 直接记录并链接就可以了
还有就是, 注册账号时, 你的密码可能并不会直接以明文密码的形式存储在服务器中. 而是存储密码的数据指纹. 因为登陆账号时, 并不需要通过原数据进行对比, 可以直接根据数据指纹来对比 是否与服务器中的密码相符合.
当然, 不仅仅只是简单的使用数据指纹. 一定还有其他的加密方式一起使用.
数字签名
使用HTTPS
协议的工作流程**
HTTPS
究竟是用什么方式加密的呢? 是对称加密? 还是非对称加密?HTTPS
的加密方式是 先非对称加密之后再对称加密1. 只用对称加密
2. 只用单一的非对称加密
3. 双方均使用非对称加密
-
效率太低.
单一的非对称加密已经很慢了, 如果通信双方都是用非对称加密. 那就是慢上加慢
-
还是有安全问题的(暂不解释)
4. 非对称加密 + 对称加密
还是有安全问题!!!**
4
中加密方法, 除了第一种方式用不了一点.- 第二种方式, 守护了 从客户端发送给服务器的数据安全
- 第三种方式, 守护了 双方的数据安全, 但是效率太慢
- 第四种方式, 则在守护了 双方的数据安全的同时, 还保证了以后正常通信的效率
- 客户端就会以为 中间人的公钥是服务器的公钥.
- 客户端会用中间人的公钥加密数据, 并发送给服务器
- 然后中间人可以对客户端发送的数据进行截取
- 又因为客户端实际使用 中间人的公钥加密数据, 所以中间人可以用自己的私钥解密 获取客户端发送的数据.
- 然后中间人再用 服务器的公钥 加密获取到的客户端发送的数据
- 再将加密好的数据发送给服务器.
- 服务器可以用自己私钥解密.
3
步的时候, 获取到服务器的公钥, 并替换成自己的公钥5
步 客户端发送对称密钥的时候, 解密 并获取对称密钥证书
这个东西了.证书
证书颁发机构(CA)颁发
给服务器的.HTTPS
协议可能使用的加密方法都不安全, 因为 在沟通加密方式时, 客户端不能确定公钥是否正确来自服务器.HTTPS
协议之前, 都需要先向CA申请一份数字证书. 申请到证书之后, 就可以使用HTTPS
协议了.如何保证?
证书颁发流程
-
服务器创建公、私钥对, 并将 公钥与其他申请信息(域名等)生成一个证书请求(
.csr
文件), 再将证书请求给CA -
CA进行审核, 并生成证书
证书的生成流程:
- CA收到证书申请
- 对申请信息进行审核
- 生成证书内容:申请者公钥、有效期、证书签名算法、颁发者等
- CA使用自己的私钥, 根据证书内容生成唯一的数字签名 (通过对证书内容的数据指纹非对称加密生成)
- 证书内容与数字签名组成CA证书
-
CA将证书颁发给服务器
服务器与客户端的证书验证流程
HTTPS
协议了- 与服务器建立通信, 接收服务器发过来的CA证书
- 根据服务器CA证书中记录的数据指纹算法, 直接 对证书内容 使用此算法 计算数据指纹
- 根据证书颁发机构, 对比浏览器中信任的颁发机构的CA证书, 并获取颁发机构的公钥
- 使用颁发机构的公钥 对 服务器CA证书的数字签名 进行解密, 得到 证书内容的 数据指纹
- 对比 数字签名解密后得出的数据指纹 与 直接对证书内容计算得出的数据指纹
- 如果一致, 则表示服务器的CA证书没被篡改, 其中记录的服务器公钥正确. 反之则不正确
不只客户端需要对CA证书进行验证, 在服务器首次收到颁发的CA证书时, 也是需要对CA证书进行验证的, 防止CA证书已经被篡改
服务器获取CA机构的公钥, 可以从CA机构提供的地址下载
CA证书能否被篡改?
-
如果, CA证书内容被篡改了, 那么数据指纹就会发生变化, 在验证 对比解密出的数据指纹时, 就会发生错误. 结果就是 被篡改的证书可以被发现发生了篡改
-
如果, CA证书内容被篡改了, 同时篡改人使用自己的密钥对已经被篡改的内容生成了数字签名, 这样 计算出的数据指纹 与 数字签名内的数据指纹 好像是相同的了.(其实这已经算是把证书掉包了)
但实际上是, 客户端根本无法对数字签名进行解密. 因为 篡改人的公钥客户端不知道, 即使知道了, 篡改人也不被客户端信任.
因为, 客户端对数字签名进行解密的前提是, 拥有 受信任的CA机构的公钥
篡改人的公钥, 明显是不被信任的
5. 证书 + 非对称加密 + 对称加密**
HTTPS
协议, 就是使用的 证书认证+非对称加密+对称加密 的加密方式, 进行加密通信的HTTPS
协议就介绍到这里啦~作者: 哈米d1ch 发表日期:2023 年 8 月 9 日