• HTTPS协议原理


    一.前言-为何要有https协议

    http协议在功能方面已经非常完善了,只不过安全性没有保障,因为数据都是明文传输的
    get方法直接将数据以url参数的方式进行传递,post方法将数据以请求体的方式进行传递
    虽然post比get安全那么一点,但是只要数据是明文传递的,那就一定不安全(隐私泄漏,数据被篡改等等安全问题)

    所以大佬们在http协议之上引入了一个加密层,设计出了https协议

    二.加密与中间方劫持

    1.什么是加密

    加密就是把 明文(要传输的信息)经过一系列变换,转换成密文
    解密就是把 密文经过一系列变换,转换成明文

    在这个加密和解密的过程中需要一些数据来辅助进行,这些数据被称为密钥

    加密和解密涉及到密码学的范畴,我们只需要知道总是有很多方法对数据进行加密解密的,至于怎么加密和解密,有密码学的大佬负责研究

    2.为何要加密

    因为只要数据是明文传递的,那就一定不安全(隐私泄漏,数据被篡改等等安全问题)
    在数据传输过程中,有中间方会进行劫持,窃取隐私信息或者篡改内容等等(至于中间方是谁? 技术既能向善又能向恶,都是被金钱蒙蔽了双眼…)
    (想象一下,如果你在使用支付宝进行支付操作时,你的用户账号,密码和支付密码被中间方盗取了…当然这种情况现在不会发生了,因为有了https,人脸识别,指纹识别等等技术)

    3.对称加密

    对称加密是指:

    加密和解密所用的密钥是相同的

    特点: 加密解密计算量小,速度快

    1.小例子

    比如: 利用按位异或的可交换性和抵消性就可以搞一个对称加密
    小明和小红要进行通信,它们都持有密钥key=1234

    小明发送一个"hello",这个"hello"的每个字符都跟key进行按位异或(也就是加密),然后才发给小红
    小红收到数据之后再将数据的每个字符跟key进行按位异或(也就是解密),转换回了"hello"

    这个密钥key就是对称密钥,在这期间即使数据被中间方劫持了,中间方也不知道你们的密钥是什么
    (不考虑中间方恶意穷举破解密钥,因为有可能获取到的非法利益还不够破解密钥的成本呢…)
    因此它也就无法获取隐私信息或者篡改信息
    (因为你改消息是为了误导接收方,获取非法利益,你都不知道接收方解密用的密钥是什么,你怎么误导他?? 所以篡改信息没意义)

    2.好处和缺点

    使用对称加密,理论上来说已经能够解决数据安全性的问题,但是在实践上,单纯只靠对称加密是行不通的
    在这里插入图片描述
    在这里插入图片描述
    小结一下: 如果只采用对称加密,实践当中为何不能解决数据安全性问题

    1. 所有的用户的对称密钥都是一样的
      中间方也能够得知对称密钥,此时加密解密就形同虚设了,因此行不通
    2. 所有用户的对称密钥都不同
      对称密钥的交换缺少安全性,中间方能够进行拦截获取对称密钥,此时加密解密就形同虚设了,而且还会增加服务器维护密钥的成本,因此行不通
    3. 对用户通过源IP地址和源端口号进行划分,分配并使用不同的对称密钥
      无法保证跟中间方密钥相同的用户的数据安全,而且如果中间方扩大影响力,获取多个密钥,那危害也是很大的,因此行不通

    总和起来,都是因为

    1. 密钥进行交换/协商时,无法保证自身的安全性
    2. 对称密钥既能对数据进行加密,又能对数据进行解密,一旦被中间方获取,那么双方通信时的加密就形同虚设了

    4.非对称加密

    非对称加密:需要通过两个密钥来进行加密和解密
    一个密钥被称为公钥,另一个被称为私钥

    加密解密时有两种使用方式:

    1. 公钥加密,私钥解密
    2. 私钥加密,公钥解密

    特点: 算法复杂,加密解密效率低

    稍后我们再来分析使用非对称加密能解决数据安全性问题吗,现在我们先介绍其他很重要的知识

    5.数据指纹/数据摘要

    在这里插入图片描述

    三.站在设计者的角度提出方案

    下面我们站在https协议设计者那些大佬的角度来思考一下如何对数据进行加密,解密

    刚才我们已经看出只使用对称加密是不行的,那么我们只使用非对称加密呢?

    1.只使用非对称加密 : 且只有server有密钥

    在这里插入图片描述
    其实如果考虑中间方欺骗client和server的话,从client到server也是不安全的
    在这里插入图片描述
    因此这种方案果断pass

    2.只使用非对称加密 : 且双方都有密钥

    欺负我client没有密钥…那我们给client也配上密钥
    我们依然先不考虑中间方欺骗client和server,

    刚才server -> client不安全是因为server发送数据使用私钥S’加密,但是中间方有公钥S,
    因此server发送数据一定不能用自己的私钥S’加密,而要用client的公钥/私钥来加密
    在这里插入图片描述
    中间方搞事情:
    在这里插入图片描述
    这个方案还有一个问题
    全都用非对称加密,效率太低了!!!
    而且你看,client都能把公钥C"安全"的发给server了,也就是说公钥C这个密钥非常"安全"

    而对称密钥缺的不就是安全嘛,人家还非常快,因此把C换成对称密钥不好吗,双方通信时都用对称密钥
    因此下一个版本

    3.非对称+对称 : client一个对称,server一对非对称

    在这里插入图片描述
    但是中间方依旧能搞事情
    在这里插入图片描述

    4.如何解决中间人攻击问题

    经过三个版本,我们发现,中间方能搞事情的原因都是因为:
    client被骗了,他认为自己受到的公钥M就是server发送的公钥S

    也就是说client无法判断收到的公钥的合法性

    现实生活当中,如何区分假钱和真钱? -> 验钞机 , 验钞机具体如何区分呢? 根据: 磁性、尺寸、厚度等特征 -> 这些特征谁规定和保证的? -> 国家相关组织

    因此我们这里也有相关组织: CA机构(Certificate Authority,证书授权机构)专门解决这一问题

    四.CA证书

    1.介绍

    在server使用HTTPS之前需要向CA机构申请CA证书,CA证书里面含有证书申请者信息,公钥信息等等
    client访问server时默认会检查该网站的CA证书,
    如果CA证书过期了,或者不可靠等等,浏览器就会给我们安全警报,我们看到之后就会关闭该网页
    在这里插入图片描述
    如果CA证书有效,那么浏览器就会从CA证书里面获取公钥

    CA证书就相当于server的合法证书,证明server公钥是正确安全的

    整个流程:
    在这里插入图片描述

    2.CA证书如何防止中间人攻击

    在这里插入图片描述
    从技术的角度,中间人对CA证书想怎么改就怎么改,掉包都可以,但是你怎么改都没用,掉包就暴露你了,到时候进局子了就

    CA证书=企业的明文数据+用CA私钥加密的 用企业明文数据生成的数据指纹

    在这里插入图片描述
    因此HTTPS协议的最终方案是:
    CA证书+非对称加密(client用server的公钥加密对称密钥发送给server)+对称加密
    既保证安全,又保证了效率

    以上就是HTTPS协议原理的全部内容,希望能对大家有所帮助!!

  • 相关阅读:
    网络信号最好的坐标 (暴力leetcode1620)-------------------c++实现
    06-JVM-监控及调优案例
    实例讲解将Graph Explorer搬上JupyterLab
    爬虫的介绍与使用
    用BFS求最短路 - 习题6道
    架构师该不该写代码?
    springboot多模块项目启动经历
    金九银十招聘季, 自动化测试面试题分享
    iptables防火墙及filter和nat的相关操作
    R语言——赋值(= ,<- ,<<-)
  • 原文地址:https://blog.csdn.net/Wzs040810/article/details/138954136