• HTTPS的加密原理


    目录

    HTTPS

    对称加密

    非对称加密

    数字证书

    HTTPS有什么问题


    HTTPS

    HTTP的不足

    1、通信使用明文,可能会被窃听

    2、不验证通信的身份,有可能遭遇伪装

    3、无法验证报文的完整性,有可能被篡改

    HTTPS是在HTTP的基础上再加入加密和认证等机制。

    HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替。

    对称加密

    对称加密简单来说双方用同一把密钥进行加密和解密,密钥必须得保密,否则加密就会失去意义。

    举个例子,最简单对称加密方法异或 ^

    例如此时密钥为 15 客户端发送数据 6,那么经过加密以后15^6 = 9,服务器就会收到 9 这条信息,服务器同样的也用密钥解密,9^15 = 6。就可以正确的获取到信息。

    如果双方都持有共同的密钥,并且只有双方知道,那么这个过程当然没问题,然而对称加密过程中密钥很有可能被第三方给获取

    在互联网上转发密钥的过程中,通信容易被监听,密钥很有可能会落入攻击者的手中,一旦发生,那就将失去加密的意义,所以需要一个方法将密钥安全的送到对方手中。


    非对称加密

    为了解决对称加密中的密钥容易被劫持的问题,引入非对称加密。

    非对称加密需要两把钥匙,公钥私钥,公钥是否被别人知道无所谓,但是私钥不能让别人知道,否则通信又将会是不安全。

    通常:公钥负责加密,私钥负责解密。

    具体的流程如下:

    1、客户端向服务器请求服务器的公钥。

    2、服务器将自己的公钥发送给客户端。

    3、客户端用服务器的公钥将自己的私钥加密后发送给服务器。

    4、服务器将加密后的客户端的私钥用自己的私钥进行解密,得到客户端的私钥。

    5、双方用客户端的私钥进行通信。

    上述过程解决了对称加密私钥容易被劫持的问题(很容易想到对私钥进行加密),看起来天衣无缝,实则还是存在问题,如下图所示:

    如果黑客劫持了服务器的公钥,并且将服务器的公钥给替换掉成自己的,将替换掉的公钥发给客户端,客户端会以为这个公钥就是服务器的(无验证过程),将客户端自己的私钥用黑客的公钥加密发送给服务器,此时黑客会抢先一步收到被自己公钥加密过后的客户端的私钥。黑客用自己的私钥解密就得到了客户端的私钥。拿到客户端的私钥以后再用服务器的公钥重新加密客户端的私钥发送给服务器。这样就完成了客户端私钥的劫持。

    所以上述非对称加密的过程一个关键的问题就是无法确保第一步客户端收到的公钥是服务器的公钥。

    为了解决上述问题,引入数字证书认证机构(CA)


    数字证书

    数字证书处于客户端和服务器双方都可信赖的第三方机构上。

    具体的流程如下图:

    CA机构有自己的公钥和私钥,公钥对外开放,私钥保密

    证书长啥样?

    可以在浏览器的左上角去查看当前访问的对方服务器的数字证书的情况。

    1、服务器将自己的公钥和一些其他信息包括域名等等递交给CA机构。

    2、CA机构制作数字签名:

    • 将明文信息进行hash算法,得到散列值。
    • 将散列值用自己的私钥进行加密,数字签名制作完成 

    3、将明文信息和数字签名组合成为数字证书颁发给服务器。

    接下来双方通信的流程就和非对称加密类似:

    1、客户端请求服务器的数字证书。

    2、客户端然后对服务器的数字证书进行验证:

    • 对明文信息用证书上给出的hash算法进行hash得到散列值。
    • 对加密的数字签名用CA机构公开的公钥进行解密,得到数字签名上的散列值。
    • 比较二者是否相同,如果相同说明没被篡改,正常通信,如果不相同说明证书被篡改,此时通信可能会不安全,客户端终止通信。

    可以看到,这样就解决了非对称加密过程中,公钥可能被篡改的风险。

    数字签名能否被篡改?

    不能,因为CA机构的私钥是保密的,可以被看到,但是不能被篡改,没有CA机构的私钥没办法重新加密。

    为什么需要hash算法?

    对明文信息进行哈希减少证书的长度,提高效率。

    证书是否会会被替换掉?

    第三者劫持了服务器的证书,然后把证书替换成自己的,是否会导致通信不安全?

    不会,证书里面含有服务器的其他信息,例如域名等等,客户端这边知道要请求服务器的域名信息,一做对比就知道是否被替换掉。


    HTTPS有什么问题

    1、与HTTP相比较,HTTPS加密过程中需要消耗更多的CPU及内存资源,如果每次通信都加密,会消耗相当多的资源,使得在计算机上能够请求数量也会随之减少。

    如果是非敏感信息就用HTTP通信,只有包含个人信息等敏感数据时,采用HTTPS加密通信。

    2、HTTPS通信需要第三方的数字证书。而使用的证书必须向认定机构(CA)购买,也是一种消耗。


    参考的文献

    彻底搞懂HTTPS的加密原理 - 知乎

    SSL证书包含了哪些信息?_沃通WoTrus的博客-CSDN博客_ssl证书内容

    《图解HTTP》

  • 相关阅读:
    李宏毅2023机器学习作业HW05解析和代码分享
    NDK环境搭建,以Windows平台为例
    OC-NSNumber和NSValue一般用来装箱拆箱
    数智亚运刷屏,优化赛事管理的神器我们也有!
    ARM64 linux 中断处理--架构
    工厂模式代码实例详解
    计算机网络安全技术与应用
    常见的HTTP请求方式
    React学习(七)— 路由react-router
    mysql中的date、datetime、timestamp你还不知道怎么使用吗
  • 原文地址:https://blog.csdn.net/weixin_43164548/article/details/126264377