Я решил создать примитивный SSH-клиент на C #; вы можете помнить меня по таким сообщениям, как примитивное соединение 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: Запрос Диффи-Хеллмана GEX (0x22 = 34) (с минимальным значением DH GEX, количеством битов и максимальным значением)
S: Ответ обмена ключами Диффи-Хеллмана (с P, G и т. Д.)
C: Diffie-Hellman GEX Init
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: Запрос Диффи-Хеллмана 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 (из-за ожидающего шифрования или?)?
Любая помощь очень ценится, спасибо:)