SSH:DH_GEX组超出范围

我们最近应用了供应商提供的OpenSSH补丁。 该补丁针对最近的Logjam攻击禁用了几个密钥交换协议。 在应用这个补丁之后,我们有一些供应商通过sftp无法交换文件,因为连接协商失败(可能是由于不推荐的密钥交换algorithm)。

在与供应商交谈之前,我只想validation一些我们所看到的事情。 下面是一个问题供应商之一的示例SSH会话(添加了行号):

# ssh -vv [email protected] 01 OpenSSH_6.2p2, OpenSSL 0.9.8j-fips 07 Jan 2009 02 debug1: Reading configuration data /etc/ssh/ssh_config 03 debug1: /etc/ssh/ssh_config line 20: Applying options for * 04 debug2: ssh_connect: needpriv 0 05 debug1: Connecting to host.domain.com [1.2.3.4] port 22. 06 debug1: Connection established. 07 debug1: permanently_set_uid: 0/0 08 debug1: identity file /root/.ssh/id_rsa type -1 09 debug1: identity file /root/.ssh/id_rsa-cert type -1 10 debug1: identity file /root/.ssh/id_dsa type -1 11 debug1: identity file /root/.ssh/id_dsa-cert type -1 12 debug1: identity file /root/.ssh/id_ecdsa type -1 13 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 14 debug1: Enabling compatibility mode for protocol 2.0 15 debug1: Local version string SSH-2.0-OpenSSH_6.2 16 debug1: Remote protocol version 2.0, remote software version GXSSSHD_Comments 17 debug1: no match: GXSSSHD_Comments 18 debug2: fd 3 setting O_NONBLOCK 19 debug1: SSH2_MSG_KEXINIT sent 20 debug1: SSH2_MSG_KEXINIT received 21 debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 22 debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss 23 debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected] 24 debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected] 25 debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-md5,hmac-sha1,[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96 26 debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-md5,hmac-sha1,[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96 27 debug2: kex_parse_kexinit: none,[email protected],zlib 28 debug2: kex_parse_kexinit: none,[email protected],zlib 29 debug2: kex_parse_kexinit: 30 debug2: kex_parse_kexinit: 31 debug2: kex_parse_kexinit: first_kex_follows 0 32 debug2: kex_parse_kexinit: reserved 0 33 debug2: kex_parse_kexinit: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256 34 debug2: kex_parse_kexinit: ssh-dss,ssh-rsa 35 debug2: kex_parse_kexinit: aes128-cbc,3des-ctr,aes128-ctr,3des-cbc,blowfish-cbc,arcfour,arcfour128 36 debug2: kex_parse_kexinit: aes128-cbc,3des-ctr,aes128-ctr,3des-cbc,blowfish-cbc,arcfour,arcfour128 37 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-md5-96,hmac-sha1-96,hmac-sha256,[email protected] 38 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-md5-96,hmac-sha1-96,hmac-sha256,[email protected] 39 debug2: kex_parse_kexinit: none,zlib 40 debug2: kex_parse_kexinit: none,zlib 41 debug2: kex_parse_kexinit: 42 debug2: kex_parse_kexinit: 43 debug2: kex_parse_kexinit: first_kex_follows 0 44 debug2: kex_parse_kexinit: reserved 0 45 debug2: mac_setup: found hmac-md5 46 debug1: kex: server->client aes128-ctr hmac-md5 none 47 debug2: mac_setup: found hmac-md5 48 debug1: kex: client->server aes128-ctr hmac-md5 none 49 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1536<3072<8192) sent 50 debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP 51 DH_GEX group out of range: 1536 !< 1024 !< 8192` 

因此,在密钥交换协商期间,客户端和服务器交换其支持的algorithm列表(第21行和第33行)。 他们同意使用两个列表中的第一个匹配,在这种情况下diffie-hellman-group-exchange-sha1 。 据我所知,这个algorithm支持客户端和服务器必须协商的一系列位长度。 在正常情况下,客户端和服务器在moduli文件中使用一个DH prime,比如/etc/ssh/moduli (我知道这最后一个语句非常 “外行人说”大概是长和短)。

在这种情况下,我认为我所看到的是位长协商失败。 在第49行,客户端(我)说:“我支持1536到8192之间的位长,并且想要使用3072位”。 但是,服务器回复并说“我只支持1024位”。 当时客户放弃说“我不能和你说话”。 这是对这里发生的事情的合理描述吗?

据我所知,这个问题完全在服务器端(假设我们没有协商像diffie-hellman-group1-sha1这样的较弱的algorithm)。 在密钥交换过程中,服务器将不得不被修改以支持更大的比特长度。

在继续之前,我想确保我正确理解这一点。 input赞赏。

如果您想使用较新的OpenSSH连接到已弃用的服务器:

 ssh -o KexAlgorithms=diffie-hellman-group14-sha1 -o HostKeyAlgorithms=+ssh-dss my.host.com 

如果你想看看发生了什么,添加-v,如果它仍然不起作用,则使用-o HostKeyAlgorithms = ssh-dss:

 ssh -v -o HostKeyAlgorithms=ssh-dss -o KexAlgorithms=diffie-hellman-group14-sha1 my.host.com 

当然,您也可以编辑/ etc / ssh / ssh_config或〜/ .ssh / ssh_config,并添加:

 Host my.host.com *.myinsecure.net 192.168.1.* 192.168.2.* HostKeyAlgorithms ssh-dss KexAlgorithms diffie-hellman-group1-sha1 

https://forum.ctwug.za.net/t/fyi-openssh-to-access-rbs-openssh-7/6069提到Mikrotik路由器板上的下列修复&#xFF1A;

 /ip ssh set strong-crypto=yes 

(注意这里,因为这个答案也出现在网页search时,寻找类似的错误信息。)

如果你想通过Git使用它,而不编辑你的ssh_config或更新SSH服务器:

 GIT_SSH="ssh -oHostKeyAlgorithms=+ssh-dss -oKexAlgorithms=diffie-hellman-group14-sha1" git clone ssh://user@host/path-to-repository 

看来你已经击中了这个错误 。

原因

对openssh软件包进行了修改,处理了Diffie-Hellman Group Exchange。 以前,可以交换大小为1024-8192的密钥。 为了增加安全性和避免“logjam”漏洞,最小值提高到1536。 但是,如果与仅支持1024的第三方ssh实现一起使用,将会发生故障。 理想情况下,应该更新第三方sshconfiguration或代码以使用更大的密钥大小。

您可以在链接中find3种不同的分辨率。 在没有pipe理权限的地方,或者有太多的官僚主义来获得更深层次的变化的时候,在服务器上等待SHA-2可用性时,摆脱有问题的algorithm似乎是最好的select。 您甚至可以在$ HOME / .ssh / config文件中以基于用户的方式执行它。

 KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1