• HTTPS原理


    加密算法:

    对此加密:加密和解密用同一个秘钥。如目前广泛应用的AES系列算法。

    非对称加密:加密和解密不是用同一个秘钥,公钥加密的用私钥解密、私钥加密的用公钥加密。如RSA、DH、DSA、ECC等。

    非对称加密相比于对称加密的一大缺点是速度慢。

    摘要算法:MD5、SHA-2等

    为了数据在网络上传输的安全,需要对发送的数据进行加密。加密可用对称加密、非对称加密,但单纯地使用它们都可能存在秘钥泄漏的情况从而导致安全问题。所以网络安全传输要解决的问题本质上就是如何在客户端和服务端间安全地协商秘钥。

    网络安全传输的技术演进:

    1. 对称加密:服务端发送 对称秘钥 给客户端,之后两者间用该对称秘钥加密数据。问题:秘钥泄露就裸奔,持有秘钥的攻击者可以对客户端服务端间的数据解密获取
    2. 非对称加密:服务端发 公钥 给客户端,客户端加密数据发给服务端、服务端用 私钥 解密,服务端用私钥加密数据发给客户端、客户端用公钥解密。问题:非对称加密效率很低;公钥同样会泄露从而服务端发给客户端的数据可被解密获取。
    3. 两者结合:服务端发公钥给客户端,客户端用公钥加密对称秘钥给服务端,之后客户端和服务端间用该对称秘钥加密数据。问题:无法应对中间人攻击(攻击人对客户端冒充服务器、对服务端冒充客户端)
    4. HTTPS:解决中间人攻击的问题。HTTPS=HTTP + SSL/TLS (SSL即Secure Socket Layer,标准化后改叫Transport Layer Security),在HTTP和TCP间加入一层SSL/TLS。SSL/TLS的核心思想就是由权威的认证机构(即CA,全世界被公认的只有几家    )来颁发身份证明(即所谓的证书)给一个站点,进行交互时服务端首先发送证书给客户端,客户端浏览器通常预置了CA的信息,因此可以根据该信息对证书进行合法性验证。

    如何验证证书有效性

    证书内容:CA颁发的证书包含 颁发的CA机构、颁给的站点域名、证书版本、有效期、服务端的公钥 等信息。

    CA机构生成证书和证书签名:CA机构对这些信息计算摘要信息并用CA的私钥加密摘要信息得到数字签名以使内容被篡改时可发现。颁发给服务端、客户端访问时传给客户端。

    客户端:客户端浏览器或操作系统预置了权威CA机构的信息,如CA机构、摘要算法、CA公钥等。因此拿到服务端出示的证书后进行的操作与上述对应——先用摘要算法进行同样的计算得到摘要信息L,再用CA公钥解密签名得到摘要信息R,对比R、L一样则说明证书未被篡改,可靠。

    总结:CA生成【包含服务端公钥的证书、CA私钥加密后的证书签名】给服务端,客户端访问后获取证书及签名并用CA私钥解密签名以验证证书未被修改过。

    为何要用CA私钥对证书的摘要加密?因为若不用私钥加密则知道摘要算法后完全可以修改证书及相应的摘要,此时客户端发觉不了。用CA私钥加密后因CA私钥别人不知故签名无法被更改,就算改了也会因客户端CA公钥解密不了而被发现。

    类似例子:网络上下载的程序可能被恶意修改过,为了验证文件真伪,文件提供者通常会同时提供文件的摘要和数字签名(用提供者的私钥对摘要进行加密得到的结果),这与HTTPS防范中间人攻击(证明客户端拿到的公钥确实是服务端的公钥)类似。参阅:http://www.ruanyifeng.com/blog/2019/11/hash-sum.html

    摘要可以用来校验文件未被修改过。但文件和摘要完全可能被同时修改过且是配对的,此情况依赖于数字签名来避免。

    数字签名可以用来校验文件确实是提供者提供的:下载者可从网上获得提供者公开的公钥并解密数字证书以验证合法性。

    为啥不只用文件提供者的私钥加密文件,这样就不用摘要,而是下载者直接用提供者的公钥解密就拿到文件了?因为文件内容可能很大,加密耗时费劲,采用摘要后只需要加密摘要。

    TLS:

    版本:v1.1、v1.2、v1.3,目前1.2应用最广

    算法:

    DES(Data Encryption Standard):56位秘钥,太短,已不安全

    3DES:DES的改进,过时

    AES(Advanced Encryption Standard):应用最广泛。AES-128、AES-192、AES-256

    ChaCha20:Google设计的加密算法,固定256位

    其他:TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等

    关于SSL/TLS可参阅:https://mp.weixin.qq.com/s/L4kZyb4zpPpn40t2CS7YAg

     

    参考资料:

    https://www.cnblogs.com/sujing/p/10927569.html

  • 相关阅读:
    MySQL学习笔记
    Git常用命令
    MacBook Pro m1安装swoole PHP版本7.4
    斐波那契数列实现的2种方法
    归纳一些比较好用的函数
    阶乘的实现
    冒泡排序
    PHP上传图片
    PHPStorm常用快捷键
    DataTables的使用
  • 原文地址:https://www.cnblogs.com/z-sm/p/10946145.html
Copyright © 2020-2023  润新知