纯理论知识,只是笔记,非教程
二进制协议格式每个数据包为以下格式:
类型名称uint32packet_lengthbytepadding_lengthbyte[n1]payload; n1=packet_length-padding_length-1byte[n2]random padding; n2=padding_lengthbyte[m]mac(Message Authentication Code - MAC);m=mac_length 协议过程 协议版本交换当 TCP 连接建立后,双方都必须发送一个标识字符。该标识字串必须是:
SSH-protoversion-softwareversion SP comments CR LF# 我公司的服务器返回的信息SSH-2.0-OpenSSH_5.3 名称描述protoversion协议版本softwareversion软件版本SP空格comments可选字符串CR回车LF换行 算法协商密钥交换从每一方发送如下数据包开始:
类型名称byteSSH_MSG_KEXINITbyte[16]cookie (random bytes)name-listkex_algorithmsname-listserver_host_key_algorithmsname-listencryption_algorithms_client_to_servername-listencryption_algorithms_server_to_clientname-listmac_algorithms_client_to_servername-listmac_algorithms_server_to_clientname-listcompression_algorithms_client_to_servername-listcompression_algorithms_server_to_clientname-listlanguages_client_to_servername-listlanguages_server_to_clientbooleanfirst_kex_packet_followsuint320 (为将来扩展预留) byte SSH_MSG_KEXINITbyte[16] cookie (random bytes)name-list kex_algorithmsname-list server_host_key_algorithmsname-list encryption_algorithms_client_to_servername-list encryption_algorithms_server_to_clientname-list mac_algorithms_client_to_servername-list mac_algorithms_server_to_clientname-list compression_algorithms_client_to_servername-list compression_algorithms_server_to_clientname-list languages_client_to_servername-list languages_server_to_clientboolean first_kex_packet_followsuint32 0 (为将来扩展预留)cookie:必须是一个由发送方生成的随机值。它的作用是使任何一方都不可能对密钥和会话标识符拥有完全决定权。
kex_algorithms: 密钥交换算法。列表的话,用逗号(,)隔开
server_host_key_algorithms: 受支持的为服务器主机密钥服务的算法的名称列表,按优先级排序。通俗点说就是服务器所支持的算法列表,用逗号(,)隔开
encryption_algorithms: 可接受的对称加密算法(也称为加密器)的名称列表,按优先级排序。
mac_algorithms: 可接受的 MAC 算法的名称列表,按优先级排序。
compression_algorithms: 可接受的压缩算法的名称列表,按优先级排序。
languages: 语言标志的名称列表,按优先级排序。
first_kex_packet_follows: 表明是否有一个猜测的密钥交换数据包跟随。
Diffie-Hellman 密钥交换首先,客户端发送:
byte SSH_MSG_KEXDH_INITmpint e服务器响应如下:
byte SSH_MSG_KEXDH_REPLYstring K_S,服务器公钥和证书 (mpint fstring s,对 H 的签名密钥交换在每一方发送一个 SSH_MSG_NEWKEYS 消息后结束
byte SSH_MSG_NEWKEYS参考地址:
ssh 协议:SSH 传输层协议