SSH协议握手核心过程(远程登录通信方式,加密信息)

对称加密

服务器,客户端都有一个相同的密钥,客户端加密之后发起请求,服务器使用同一个密钥进行解密,反馈信息

非对称加密

客户端存在公钥和私钥,客户端使用密钥加密发送请求时,将公钥也发送给服务器,服务起通过密钥进行解密查看请求,然后服务端加密信息返回给客户端,只有与公钥成对的私钥才能解密信息,这样就做到非对称加密

  • 在以上两个过程中都存在一个问题,就是如何将密钥交给服务器的过程中而不被中间人了解具体密钥呢,这里引申出TCP三次握手协议

TCP握手协议

简单来说就是来回加密的过程,这个过程一共三回使用也被称作TCP三次握手协议(DH密钥交换),就是当url发起请求之后与服务器简历连接的一个过程

  1. 首先,客户端使用自己的密钥进行加密,这样其他人就无法开启,然后将数据信息发送给服务器

  2. 服务接收之后,通过服务器的密钥再进行加密,这样只有服务器才能解析服务器所加密的内容,然后再返还给客户端

  3. 客户端接收之后通过自己的密钥,将原本设置的加密给取消掉,由于还存在服务器的加密,所以此时也没有中间人能打开,然后发送给服务器

  4. 服务器再进解密,也就获取了客户端开始发送的信息(通过上述操作确认服务器与客户端的发送能力与服务器接收能力均无异常,就建立连接)

    三次握手

    第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN,此时客户端处于 SYN_SEND 状态。
    第二次握手: 服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。
    第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。

再这个握手过程中,还有可能客户端与服务交换的信息在中间过程直接被截取,然后被替换成其它的信息以及加密,这就可以通过哈希值来判断是否被篡改,ssh也提供了方法证明哈希值是否被篡改(这里就不去了解SSH如何证明的了,超过我所能理解的知识范围,涉及到了话有机会再补充相关知识)

图中的seq为序列号,是一个数随机数,ack为确认号,接收seq,确认值为seq+1,表示确认接收到了seq值,ACK=1,就进一步请确认对方序列号有效,SYN=1,所以也可以通过tcp报文进一步了解建立连接情况

附图TCP三次握手

附图传输层协议

详细链接: TCP三次握手和四次挥手的全过程! - Java团长 - 博客园 (cnblogs.com)

最后提及一下UDP,与TCP不同的是,UDP支持一对多传输,而不是TCP的一对一,其安全性相对较低,且数据不可靠,应用于一些广播啊,直播之类的,UDP不需要三次握手协议,数据比较自由,不会对数据进行处理

区别附图

posted @ 2022-10-25 22:23  YYYang333  阅读(666)  评论(0)    收藏  举报