文档章节

一、ssh 协议:SSH 传输层协议

for。
 for。
发布于 2016/07/12 22:33
字数 665
阅读 321
收藏 4
ssh

1. 二进制协议格式

每个数据包为以下格式

uint32      packet_length
byte        padding_length
byte[n1]    payload; n1 = packet_length - padding_length - 1
byte[n2]    random padding; n2 = padding_length
byte[m]     mac (Message Authentication Code - MAC); m = mac_length

输入图片说明

packet_length: 以字节为单位的数据包长度,不包括 'mac' 或 'packet_length' 域自身。

padding_length: 'random padding' 的长度(字节)。

random padding: 任意长度的填充,使(packet_length || padding_length || payload || random padding)的总长度是加密分组长度或 8 中较大者的倍数。最少必须有 4 字节的填充。填充应包含随机字节。填充的最大长度为 255 字节。

mac: 消息验证码。如果已经协商了消息验证,该域包含 MAC。初始时,MAC 算法必须是"none"。

2. 协议过程

1) 协议版本交换

当 TCP 连接建立后,双方都必须发送一个标识字符。该标识字串必须是

SSH-protoversion-softwareversion SP comments CR LF

protoversion: 协议版本

softwareversion: 软件版本

SP: 空格

comments: 可选字符串

CR: 回车

LF: 换行

如使用同一主机上使用 OpenSSH 时,客户端发送:

输入图片说明

服务器端都会发送:

输入图片说明

2) 算法协商

密钥交换从每一方发送如下数据包开始:

byte        SSH_MSG_KEXINIT
byte[16]    cookie (random bytes)
name-list   kex_algorithms
name-list   server_host_key_algorithms
name-list   encryption_algorithms_client_to_server
name-list   encryption_algorithms_server_to_client
name-list   mac_algorithms_client_to_server
name-list   mac_algorithms_server_to_client
name-list   compression_algorithms_client_to_server
name-list   compression_algorithms_server_to_client
name-list   languages_client_to_server
name-list   languages_server_to_client
boolean     first_kex_packet_follows
uint32      0 (为将来扩展预留)`

cookie: 必须是一个由发送方生成的随机值。它的作用是使任何一方都不可能对密钥和会话标识符拥有完全决定权。

kex_algorithms: 密钥交换算法。

server_host_key_algorithms: 受支持的为服务器主机密钥服务的算法的名称列表,按优先级排序。

encryption_algorithms: 可接受的对称加密算法(也称为加密器)的名称列表,按优先级排序。

mac_algorithms: 可接受的 MAC 算法的名称列表,按优先级排序。

compression_algorithms: 可接受的压缩算法的名称列表,按优先级排序。

languages: 语言标志的名称列表,按优先级排序。

first_kex_packet_follows: 表明是否有一个猜测的密钥交换数据包跟随。

如以 OpenSSH 为例,客户端和服务器都会发送:

输入图片说明

3) Diffie-Hellman 密钥交换

首先,客户端发送:

byte    SSH_MSG_KEXDH_INIT
mpint   e

服务器响应如下:

byte    SSH_MSG_KEXDH_REPLY
string  K_S,服务器公钥和证书 (
mpint   f
string  s,对 H 的签名

密钥交换在每一方发送一个 SSH_MSG_NEWKEYS 消息后结束

byte    SSH_MSG_NEWKEYS

以 OpenSSH 为例

客户端发送:

输入图片说明

服务端响应:

输入图片说明

客户端发送 New Keys:

输入图片说明

服务端发送 New Keys:

输入图片说明

之后,数据都以加密方式传输。

4) 总体过程

输入图片说明

参考文档

http://git.oschina.net/lowkey2046/libssh/tree/master/document

© 著作权归作者所有

共有 人打赏支持
for。

for。

粉丝 86
博文 47
码字总数 18257
作品 0
深圳
程序员
私信 提问
SSH和SFTP简介

传统FTP 在传输机制和实现原理上是没有考虑安全机制的,因为它们在网络上用明文传送数据、用户帐号和用户口令,别有用心的人非常容易地就可以截获这些数据、用户帐 号和用户口令。而且,这些...

老先生二号
2017/06/25
0
0
一:Ubuntu下SSH安装及配置

一:SSH(安全外壳协议)的简单介绍: SSH 为 Secure Shell 的缩写,SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用...

牧羊人Berg
2016/04/29
46
0
优秀的 Android SSH 客户端

SSH是工作在传输层和应用层之上的流行网络安全协议,能利用128位密钥加密发送和接收的信息,确保主机之间的通信不会在传输过程中被中间人拦 截。SSH常被用于登陆到远程机器执行命令,系统管理...

oschina
2013/06/15
42.6K
19
远程登录:telnet与ssh

1,什么是远程登录 远程登录是用户使用ssh,telnet等命令,登录到一台远程服务器进行操作,使自己的计算机暂时成为远程主机的一个仿真终端的过程。 登录系统后所有的操作都是对远程主机的操作...

nao
2014/03/23
0
0
Java 实现 SSH 协议的客户端登录认证方式

背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解。首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则, ...

IBMdW
2013/08/27
2.5K
2

没有更多内容

加载失败,请刷新页面

加载更多

MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
今天
2
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
6
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
12
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
4
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部