0%

SSH协议握手过程详解

简介

ssh通过创建安全隧道来实现ssh客户端与服务器之间的连接,
它的主要用途是连接远程服务器然后在上面执行指令。

协议

ssh协议主要由三部分组成:

  • 传输层协议:主要负责认证服务器、加密数据、确保数据完整性
  • 用户身份验证协议:负责认证使用者是否是ssh服务器的用户
  • 连接协议:将加密的信息通道改成若干个逻辑通道

传输层协议

今天主要讲一下传输层协议。

建立连接

sever收到来自client发送过来的请求后,先进行三次握手,建立tcp连接,下面给出我使用wireshark抓到的包
tcp

算法协商、版本协商

双方发送自己所支持的版本号以及算法,协商确定版本及算法,若成功则继续,否则断开连接
init
版本
在这里插入图片描述
在这里插入图片描述

密钥交换

client根据server发送过来的数据生成一对密钥,将公钥发送给server
在这里插入图片描述
在这里插入图片描述
其中有一个e字段,这个就是client所生成的公钥
server也会生成一对密钥,并且将自己的公钥与client发送过来的公钥一起生成共享密钥,并且会将自己的临时公钥以及host-key,还有server会收集双方的临时公钥、共享密钥、host-key再加上一定的数据例如:server和client的版本字符串,对这些数据使用之前它们协商好的哈希算法计算其哈希值,然后使用自己的私钥对其签名生成signature,然后将这些值一起发送给client
在这里插入图片描述
client收到后会通过host-key先验证服务器的身份,然后将其保存到本地文件夹中,再使用server发送过来的临时公钥生成共享密钥,再加密签名,将其结果与自己所计算的哈希值进行比较,验证数据时没有问题的,这样的话整个密钥协商环节就结束了。

一旦建立了加密传输层并且验证了server的身份,client就必须进行身份验证,主要有两种方式:

  • 密码身份验证:主要就是加密密码进行传输
  • 密钥对认证:客户端生成密钥对然后将公钥发送给server,server将其存储起来并生成对应的id,将id返回给client,之后client则可以通过id进行验证server是否存在自己的公钥,进而验证身份。

总结

我通过wireshark可以很好的看到密钥协商具体过程的数据,让我更好的去理解这个过程,但是我的目的是去提取过程中的数据,到目前还没有找到相应的解决办法。

-------------本文结束感谢您的阅读-------------
#