• HTTPS原理




    面试常客,不得不复习,太功利了


    1. 互相交换密钥的机制

    近代的加密方法中加密算法是公开的,而密钥确实保密的


    1.1 共享密钥

    加密和解密都用同一个密钥,其有个最大挑战如何安全传递密钥,拥有密钥就拥有加密解密的能力,如果被互联网转发密钥被窃听,那么就失去了加密的意义


    1.2 公开密钥

    加密和解密使用不同的密钥,这两把密钥叫做公钥和私钥。客户端用服务器的公钥加密内容发送出去,服务器就用自己的密钥进行解密


    1.3 二者对比

    公开密钥的处理更加复杂,效率更低,但没有共享密钥使用同把密钥的风险


    1.4 HTTPS混用加密机制

    采用共享和公开密钥混合机制,先用公开密钥将共享密钥加密发送给对方,然后确保交换的密钥安全前提下,使用共享密钥通信,综合了二者的优缺点


    1.5 证明公开密钥正确性的证书

    公开密钥还是存在一些问题,无法证明自身是货真价实的密钥。比如在使用交换公钥时遭到了中间人攻击,那么双方在一开始的交换密钥都被掉包,后续的通信对于中间人透明,此时需要使用证书来证明对方的身份,步骤:

    • 公认信赖的CA机构认证某个站点后,对该站点的公开密钥签名放入证书中
    • 服务器有相关请求,会响应自己的证书给客服端
    • 客户端收到证书会使用CA的公开密钥解密,然后验证签名的合法性,通过则验证了公开密钥的正确性
    • CA的公开密钥会植入浏览器内部
    • 中间虽可用CA的公钥对证书篡改,但无CA密钥是无法加密的和签名的验证的




    2. HTTPS

    HTTPS并非一种新协议,只是HTTP通信接口部分使用了SSL/TLS协议代替。正常HTTP直接和TCP通信,使用HTTPS时,HTTP先和SSL/TCL通信,然后后者再与TCP通信,简单就是应用层和传输层增加了SSL/TCL


    SSL由网景公司提出,后标准化后称为TLS


    2.1 HTTP的缺点

    • 通信使用明文
    • 不验证通信方的身份
    • 无法验证报文的完整性

    由此出现了HTTPS


    2.2 HTTPS安全通信机制

    1. 客户端发起连接,TCP的三次握手

    --------------------HTTPS当然也是基于TCP-------------------------------------

    1. 客户端发送ClientHello,包含支持的SSL版本和组件
    2. 服务器响应ServerHello,包含上面筛选的SSL版本和组件
    3. 服务器发送CA证书
    4. 服务器发送ServerHelleDone通知客户端,最初的握手结束

    ------------------------第一阶段的握手协商结束------------------------------------

    1. 客服端响应ClientKeyExchange报文,包含服务器公钥加密的随机密码串(证书验证通过)
    2. 客服端响应ChangeCipherSpec报文,告诉服务器,此后采用Pre-master secret密钥加密
    3. 客户端发送Finished报文,包含至今全部报文的校验值,若服务器能加密校验值,则这次握手成功
    4. 服务器端同样响应ChangeCipherSpec报文
    5. 同样发送Finished报文
    6. 二者的Finished报文交换后,SSL建立,此后进行HTTP协议交流,受SSL保护



    参考

    《图解TCP/IP》


  • 相关阅读:
    20201226 ZooKeeper
    20201220 分布式理论、架构设计(自定义RPC)
    20201217 Cluster模式潜在问题及解决方案、Web服务综合解决方案
    20201216 Nginx
    20201214 Tomcat
    20201209 Spring Boot
    20201206 Spring Data JPA
    20201205 Spring MVC
    20201128 IoC容器设计实现及Spring源码分析
    numpy数组及处理:效率对比
  • 原文地址:https://www.cnblogs.com/Howlet/p/13022320.html
Copyright © 2020-2023  润新知