HTTP&HTTPS&Kerberos

TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

TCP协议采用三次握手,四次挥手的策略,分别用于建立连接和释放连接:
建立连接时的三次握手

  • 第一次握手:建立连接时,客户端发送 SYN=1,ACK=0 到服务器,表示希望建立连接,并进入SYN_SENT状态,等待服务器确认;
  • 第二次握手:服务器收到建立连接的请求,同时自己也发送 SYN=1,ACK=1,表示同意连接的请求,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

释放连接时的四次挥手

  • 第一次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。
  • 第二次挥手:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。
  • 第三次挥手:客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
  • 第四次挥手:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
    客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。客户端需要等待最长报文段寿命两倍的时间后才结束服务。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。

HTTPS 工作流程

  1. 客户端请求建立SSL连接,并将自己支持的一套加密规则发送给服务器
  2. 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给客户端。证书里面包含了服务器地址,加密公钥,以及证书的颁发机构等信息
  3. 客户端获得服务器证书之后:

    验证证书的合法性
    如果证书受信任,客户端会生成一串随机数的密码,并用证书中提供的公钥加密
    生成握手消息并计算握手消息的hash值
    使用生成的随机数密码对握手消息进行加密,最后将之前生成的所有信息发送给服务器

  4. 服务器接收客户端发来的数据之后:

    使用自己的私钥将信息解密取出密码
    使用密码解密客户端发来的握手消息,并验证HASH是否与客户端发来的一致
    使用密码加密一段握手消息,发送给客户端

  5. 客户端解密并计算握手消息的hash值,如果与服务端发来的hash值一致,此时握手结束
  6. 使用随机密码和对称加密算法对传输的数据加密,传输

Kerberos 体系

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

Kerberos 流程

  • AS(Authentication Server): 认证服务器
  • KDC(Key Distribution Center): 密钥分发中心
  • TGT(Ticket Granting Ticket): 票据授权票据,票据的票据
  • SGT (Server Granting Ticket): 服务许可票据
  • TGS(Ticket Granting Server): 票据授权服务器
  • SS(Service Server): 特定服务提供端
  • 客户端发送客户端名和TGS名到AS
  • AS检查数据库是否有客户机;
    若发现客户机,则生成临时密钥K1,并用客户机密钥的hash值加密K1;
    产生TGT(TGT包括K1,客户端名,有效期),并用固定密钥KS1加密,固定密钥KS1保存在AS和TGS;
    发送TGT和K1到客户端
  • 客户端解出K1,用K1加密客户端名,并把加密的客户端名、TGT、加密的SS名发给TGS
  • TGS用固定密钥KS1解TGT,比对K1,用K1解客户端名,比对客户端名;
    产生SGT(SGT包含临时密钥K2、客户端名、有效期),并用固定密钥KS2加密,固定密钥KS2存放在AS、TGS、SS
    用K1加密K2,把K2和SGT返回给客户端
  • 客户端解出K2,用K2加密客户端名,把加密的客户端名、SGT、时间戳发给SS
  • SS用固定密钥KS2解SGT得到K2和客户端名,用K2解K2加密的客户端名,比对客户端名
    SS用K2加密时间戳返还给客户端并提供服务
  • 客户端用K2解时间戳验证SS合法

你可能感兴趣的:(系统,http,https,kerberos,网络)