我已经着手用 C# 制作一个原始的 SSH 客户端;您可能会从诸如原始 ssh 连接(低级)之类的帖子中记住我,呵呵。
无论如何,在我发起 DH 密钥交换之前,一切都很好。我将建立 ssh 连接(从 openssh 客户端到 openssh 服务器)时的流量与我的客户端连接到同一个 openssh 服务器时的流量进行了比较。
OpenSSH 客户端 -> OpenSSH 服务器(S 代表服务器,C 代表客户端):S:SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2\r(打招呼)C:SSH-2.0-OpenSSH_5.2\r(自我介绍)C : 密钥交换初始化 (0x14 = 20) S: 密钥交换初始化 C: Diffie-Hellman GEX 请求 (0x22 = 34)(带有 DH GEX 最小值、位数和最大值) S: Diffie-Hellman 密钥交换回复(带有 P、 G 等) C:Diffie-Hellman GEX 初始化 S:Diffie-Hellman GEX 回复
我的客户端 -> OpenSSH 服务器:S:SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2\r(打招呼)C:SSH-2.0-Some_Name\r(自我介绍)C:密钥交换初始化(0x14 = 20)S:密钥交换初始化 C:Diffie-Hellman GEX 请求(0x22 = 34)(DH GEX 最小值、位数和最大值)
然后是一个虚假的 TCP 数据包作为回复(可能在 GEX 请求之后/之后服务器连接已终止。
我还没有使用 AES128(我认为这是选择的加密,但我不确定如何验证...),我仍然以非压缩格式发送,希望得到 P、G等值来进行 DH 计算。
所以我被困的地方是:RFC 4419 第 3 页http://www.ietf.org/rfc/rfc4419.txt 我已经发送了 SSH_MSG_KEY_DH_GEX_REQUEST,但服务器没有响应 SSH_MSG_KEX_DH_GEX_GROUP。
谁能给我一些关于我在这里不理解的建议?服务器是否不理解我的 GEX 请求(因为它需要加密,或者?)?
非常感谢任何帮助,谢谢:)