• HTTPS工作过程


    1. 前言

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

    2. 回顾TCP

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

    TCP-handshake.jpg

    2.1. TCP的三次握手

    建立一个TCP连接主要有三个步骤:

    1. client端首先发送一个SYN包告诉server端: 我要建立一个链接,我的序号是x
    2. server端接收到SYN包后回复client一个ACK包(将x+1): 我收到了;同时server端也发送一个SYN包给client: 我这边已经准备好了,我的序号是y,你可以连接了。
    3. client收到之后,回复一个ACK包(y+1): 好,我已经连接好了。

    这样一个TCP连接成功建立。

    关于tcp三次握手找到一张比较形象的图:

    TCP-3-handshake-example.jpg

    2.2. TCP四次挥手

    在断开TCP连接时,主要有四个操作:

    1. client发送一个FIN包给server端:我要断开连接了
    2. server端回复client端一个ACK包:好,我知道了
    3. server端发送一个FIN包给client端:那我关闭连接了
    4. client恢复一个ACK包给server:好的

    把上面的图改了一下:
    TCP-4-byes-example.png

    3. 准备知识

    3.1. 对称加密

    对称加密值得是加密解密都是用同一个密钥。对称加密只有一个密钥,作为私钥。

    常见的对称加密算法:DES,AES,3DES等。

    对称加密加密和解密使用的是同样的密钥,所以速度较快。但正因为只依赖一个密钥,密钥一旦暴露,便毫无秘密可言,所以安全性不高。

    3.2. 非对称加密

    非对称加密有两个密钥,一个公钥,一个密钥。加密和解密使用不同的密钥。公钥加密的信息,只有私钥才能解密;私钥加密的信息,只有公钥才能解密。

    常见的非对称加密算法:RSA,ECC等。

    非对称加密使用了公钥和密钥一对密钥,安全性较高,但是加密与解密的速度较慢。

    4. HTTPS工作流程

    说了这么多,终于到了本文的主要内容:HTTPS工作过程。HTTPS是建立在HTTP基础之上的,因此在进行HTTPS连接之前,TCP的三次握手需要先执行。然后才是HTTPS的连接建立。上面说到的对称加密和非对称加密也会在过程中看到。下图是https过程:

    HTTPS-progress.png

    1. client请求server。这一步向server发送客户端支持的加密协议,SSL版本信息等。

    2. server接收到请求之后,确定加密方式,以证书的形式回应client,其中包含证书公钥以及一些其他信息。

      HTTPS-SSL-info.png

    3. client收到响应之后会验证证书是否有效,如果无效则提示警告信息(自己生成证书就会出现)。如果有效,客户端会生成一个随机数(会话密钥),并用公钥进行加密,然后传递给server。

    4. server收到公钥解密的内容,利用私钥进行解密获得客户端生成的随机数(会话密钥)[非对称加密]。然后server将获得的随机数当成私钥堆数据加密一段数据,作为握手消息发送给client。

    5. client使用之前生成的会话密钥对server回应的消息进行解密[对称加密]。至此https连接建立完成。

    6. 后续会话数据传输client发送给server的消息均通过会话密钥进行加密,server通过会话密钥进行解密处理。server响应给client也通过会话密钥进行加密,client通过会话密钥解密呈现给用户。

    HTTPS在建立连接的过程中通过非对称加密进行会话密钥的传输,待连接建立成功之后,会话密钥只有客户端和服务端知道,后续的所有数据传输均通过会话密钥进行对称加密。这样可以使后续的数据传输速度更快。

    参考资源

  • 相关阅读:
    Redis源码阅读笔记(2)——字典(Map)实现原理
    Partition List ——LeetCode
    docker format (golang template)
    markdown 换行
    pecan快速教程
    nvdimm
    k8s device plugin
    linux 文件同步
    复制MIFARE Classic卡
    install docker swarm on centos
  • 原文地址:https://www.cnblogs.com/nickhan/p/13702573.html
Copyright © 2020-2023  润新知