SFTP 密钥问题?java.security.InvalidAlgorithmParameterException

SFTP 密钥问题?java.security.InvalidAlgorithmParameterException

我正在尝试使用我的应用程序 SFTP 客户端测试连接来连接到 MF,但出现了错误:

SFTP 用户别名 GLDFundingEngine_User 测试失败。详细信息:Session.connect:java.security.InvalidAlgorithmParameterException:素数大小必须是 64 的倍数,并且只能在 512 到 2048 之间(含)

这是一个内置客户端,所以我无法控制它。我测试了这两个键,它们应该很好:

ssh-keygen -lf intserv.rsa.pub
2048

ssh-keygen -lf GLDFundingEngine_XXXXXXXXXXXXXXXXXXXX_22_rsa.pub
1024

此错误是否指向其他问题?搜索 stack exchange 只会指向不同的 SSH 库,而我无法更改这些库。

谢谢

答案1

问题肯定不是你的钥匙,而是最有可能是服务器的 Diffie-Hellman 参数——或者可能是他们的 DSA 密钥,但使用 DSA 密钥进行 SSH 的人并不多,尤其是自从 OpenSSH 最近弃用它们以来。可能值得进行网络跟踪以准确查看错误发生的时间:例如在 group14 的初始协商中;或 DHGEXgroup 及其参数;或包含 DSA 签名和该签名的 DH(GEX)reply。

如果你使用的是 Sun/Oracle Java 8 之前的版本,它无法处理大于 1024 的 DH(或 DSA),但 DH 大小 1024 现在被认为是易受攻击的,因此许多服务器使用 2048。请参阅https://weakdh.orghttp://www.keylength.org和/或关于 Logjam 的众多问题(主要是 security.SX 和 crypto.SX)。在这种情况下,您有两个选择:升级到 Java 8,其中 DH(和 DSA)2048 有效;或者如果服务器支持 ECDH,并且您正在使用的 SSH 库(无法更改)也支持,但您使用的是 Java 6(或更低版本?),不支持,请从http://www.bouncycastle.org哪个支持 ECDH,通常它比经典 DH 更受欢迎,从而避免了这个问题。

如果您使用的是 IBM Java,正如我从 MF -> 大型机 -> IBM 大型机 -> IBM 商店的可能性中大胆猜测的那样,这个答案并不直接适用。IBM Java 使用的 IBM 加密提供程序与 Sun/Oracle Java 中的 Sun/Oracle 加密提供程序不同。但是,如果您查看其文档以了解 DH 参数大小和可能的 DSA 参数大小,可能会有类似的东西。

如果不是 DH,那么一定要查看网络跟踪,如果您无法弄清楚,请将相关部分添加到您的问题中。

交叉重复
https://stackoverflow.com/questions/6851461/java-why-does-ssl-handshake-give-could-not-generate-dh-keypair-exception
https://stackoverflow.com/questions/10687200/java-7-and-could-not-generate-dh-keypair
https://stackoverflow.com/questions/21442547/java-ssl-dh-keypair-generation-prime-size-error
https://stackoverflow.com/questions/33088458/how-to-workaround-java-6-ssl-error

相关内容