• Https协议原理剖析【计算机网络】【三种加密方法 | CA证书 】


    目录

    一,fidler工具

    前提知识

    二,Https原理解析

    1. 中间人攻击

    2. 常见的加密方式

    1). 对称加密

    2). 非对称加密 + 对称加密

    4). CA证书

    1. 数据摘要

    3. 数字签名

    CA证书 

    理解数据签名

    存在的安全疑问?

    1. 中间⼈有没有可能篡改该证书?

    2. 篡改整个证书包体?

    如何成为中间⼈ - 了解

    edge浏览器证书位置:

    5). CA & 非对称加密 + 对称加密

    总结


    嗨!收到一张超美的风景图,愿你每天都能顺心!

    一,fidler工具

    简介: 

     fiddler 是由 C# 开发的最强大好用的免费web调试工具之一,可记录所有客户端和服务见的 http 以及 https 请求,可监视设断点,甚至修改输入输出数据,它还包含了一个强大的基于事件脚本的子系统,并且能使用 .net 语言来拓展。

    简单理解:

    详细教程,请参考其他博主。

    前提知识

    什么是"加密"
    加密:就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂ .
    解密:就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂ .
    在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密钥

    二,Https原理解析

            首先,从前面的http协议开始,我们知道客户端可以通过get,post向服务端发出请求,post较get有隐私性,但他们终究是明文传输,只要截取,就能直接得到里面信息,甚至篡改,不安全。https协议就是来解决数据在这个安全问题。笼统的解释方法:对数据进行加密解密

    1. 中间人攻击

    因为http的内容是明⽂传输的,明⽂数据会经过 路由器、wifi热点、通信服务运营商、代理服务器 等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双⽅察觉,这就是 中间⼈攻击 ,所以我们才需要对信息进⾏加密。

    加密与解密,看似比较简单,但实际问题远比这复杂,下面让我们逐渐理解Https如何做到在网络中实现数据安全。

    2. 常见的加密方式

    1). 对称加密

    采⽤单钥 密码系统 的加密⽅法,同⼀个 密钥 可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
    常⻅对称加密算法(了解): DES 3DES 、AES、TDEA、 Blowfish 、RC2等
    特点:算法公开、计算量⼩、 加密速度快 加密效率⾼
    对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂。
    只使用对称加密缺点: 对方不知道“密钥”,并且服务器不可能面对用户都用一种密钥。只要用户端都知道密钥,中间人也能获取,数据任然不安全

          因此密钥的传输也必须加密传输! 但是要想对密钥进⾏对称加密, 就仍然需要先协商确定⼀个 "密钥的密钥". 这就成了 "先有鸡还是先有蛋" 的问题了. 此时密钥的传输再⽤对称加密就⾏不通了。

    2). 非对称加密 + 对称加密

    需要两个 密钥 来进⾏加密和解密,这两个密钥是 公开密钥 (public key,简称公钥)和私有密钥 (private key,简称私钥)。
    常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA
    特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对 称加密解密的速度快。
    ⾮对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥"。 公钥和私钥 配对 的. 最⼤的缺点就是 运算速度⾮常慢 ,⽐对称加密要慢很多.
    通过公钥对明⽂加密, 变成密⽂
    通过私钥对密⽂解密, 变成明⽂
    也可以反着⽤
    通过私钥对明⽂加密, 变成密⽂
    通过公钥对密⽂解密, 变成明⽂

    如果最开始,中间⼈就已经开始攻击了呢? 问题是如何保证,从网络传来的S是否是真实的服务端的公钥

    4). CA证书

    讲解CA证书时,我们首先了解:数字签名,数据摘要(或数据指纹)。

    1. 数据摘要

    数字指纹(数据摘要),其基本原理是利⽤单向散列函数( Hash函数 )对信息进⾏运算,⽣成 ⼀串固定⻓度的数字摘要 。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
    摘要常⻅算法:有 MD5 、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有
    碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)
    摘要特征:和 加密算法 的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息( 无法反推原文 ),通常⽤来 进⾏数据对⽐

    3. 数字签名

    对数据摘要进行加密后,就形成了数字签名。

    CA证书 

     服务端在使⽤HTTPS前,需要向CA机构(政府单位)申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性。

    申请CA证书的步骤:

    需要注意的是:申请证书前,需要在特定平台⽣成CSR文件,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。(服务端这个私钥就是来保证交换对称密匙的安全)
    其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端⾃⼰保留,⽤来后续进⾏通信
    可以使⽤在线⽣成CSR和私钥: https://myssl.com/csr_create.html
    形成CSR之后,后续就是向CA机构进⾏申请认证,不过⼀般认证过程很繁琐,⽹络各种提供证书申请的服务商,⼀般真的需要,直接找平台解决就⾏。

    理解数据签名

    签名的形成是基于⾮对称加密算法的。

    当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:
    1. CA机构拥有⾮对称加密的私钥A和公钥A'
    2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
    3. 然后对数据摘要⽤CA私钥A'加密,得到数字签名S
    服务端申请的证书明⽂和数字签名S 共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了。
    客⼾端进⾏认证
    当客⼾端获取到这个证书之后, 会对证书进⾏校验(防⽌证书是伪造的)。
    判定证书的有效期是否过期
    判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
    验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到⼀个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对⽐ hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的。

    存在的安全疑问?

    1. 中间⼈有没有可能篡改该证书?

    中间⼈篡改了证书的明⽂,由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后,的证书形成匹配的签名
    如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈。

    2. 篡改整个证书包体?

    • 首先替换的证书也必须是真实有效的证书。
    • 既然是真实有效的证书,其真实内容如果与所需要的网站或网页不同,客户端可以比较容易的检查发现。

    如何成为中间⼈ - 了解

    ARP欺骗:在局域⽹中,hacker经过收到ARP Request⼴播包,能够偷听到其它节点的 (IP, MAC)
    地址。例, ⿊客收到两个主机A, B的地址,告诉B (受害者) ,⾃⼰是A,使得B在发送给A 的数据包
    都被⿊客截取
    ICMP攻击:由于ICMP协议中有重定向的报⽂类型,那么我们就可以伪造⼀个ICMP信息然后发送给
    局域⽹中的客⼾端,并伪装⾃⼰是⼀个更好的路由通路。从⽽导致⽬标所有的上⽹流量都会发送到
    我们指定的接⼝上,达到和ARP欺骗同样的效果
    假wifi && 假⽹站等

    edge浏览器证书位置:

    设置中搜索安全性

    5). CA & 非对称加密 + 对称加密

    流程梳理:

    总结

    https协议使用了三组加密:

    1. 第一组(非对称加密):检测证书是否被篡改。服务器持有私钥(制作CSR时产生的一对密钥),客户端持有CA机构的公钥。当客户端第一次向服务端提出请求,服务端返回一个签名证书,客户端验证其证书的合法性。

    2. 第二组(非对称加密):保证对称加密的密钥安全发送给服务端。在第一组中,如果客户端验证证书合法(或者我们强制信任此证书),我们将提取证书里的公钥,对对称加密的密钥进行加密,发送给服务端。

    3. 第三组(对称加密):对后续数据加密。第二组中,客户端发送来对称加密的密钥,随后根据密钥,加密资源,向客户端发送资源,至此交换资源传递开始。

    关系:第一组保证服务端公钥的真实性,第二组保证对称加密的密钥安全发送给服务端。

    结语

       本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获请留下你的小赞,你的点赞和关注将会成为博主创作的动力。

  • 相关阅读:
    byte数据与Int和bit转换类
    详解:递归 和 排序(冒泡排序,选择排序,插入排序,归并排序,快速排序,希尔排序)
    66个Python练手项目,附源码
    ARouter之kotlin build.gradle.kts
    5‘-二磷酸鸟嘌呤核苷-岩藻糖二钠盐,GDP-Fucose,15839-70-0
    y137.第八章 Servless和Knative从入门到精通 -- Serverless概念和基础(一)
    【杂谈】-蓝牙低功耗数据传输模式比较
    Hudi SQL DDL
    2713. 矩阵中严格递增的单元格数
    【java并发编程】ReentrantLock 可重入读写锁
  • 原文地址:https://blog.csdn.net/qq_72112924/article/details/138133815