我正在尝试使用我的应用程序 SFTP 客户端测试连接来连接到 MF,但出现错误:
SFTP 用户别名 GLDFundingEngine_User 测试失败。详细信息: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size 必须是 64 的倍数,并且只能从 512 到 2048(含)
这是一个内置客户端,所以我对它没有太多控制权。我测试了这两个键,它们应该很好:
ssh-keygen -lf intserv.rsa.pub
2048
ssh-keygen -lf GLDFundingEngine_XXXXXXXXXXXXXXXXXXXX_22_rsa.pub
1024
这个错误可能指向其他东西吗?搜索堆栈交换只是指向我无法更改的不同 SSH 库。
谢谢
问题绝对不是你的关键;这很可能是服务器的 Diffie-Hellman 参数——或者可能是他们的 DSA 密钥,但没有太多人将 DSA 密钥用于 SSH,特别是因为 OpenSSH 最近弃用了它们。可能值得进行网络跟踪以准确查看错误发生的时间:例如 group14 的初始协商;或 DHGEXgroup 及其参数;或包含 DSA 签名和该签名的 DH(GEX) 回复。
如果您使用的是版本 8 之前的 Sun/Oracle Java,它无法处理大于 1024 的 DH(或 DSA)大小,但 DH 大小 1024 现在被认为是易受攻击的,因此许多服务器使用 2048。请参阅https://weakdh.org和http://www.keylength.org和/或许多关于 Logjam 的主要关于 security.SX 和 crypto.SX 的 Q。在这种情况下,您有两个选择:升级到 DH(和 DSA)2048 工作的 Java 8;或者,如果服务器支持 ECDH 和您正在使用且无法更改的 SSH 库,但您使用的 Java 6(或更低版本?)不支持,请从http://www.bouncycastle.org添加提供程序它确实支持 ECDH,这通常比经典 DH 更受欢迎,从而避免了这个问题。
如果您使用的是 IBM Java,正如我从 MF -> mainframe -> IBM mainframe -> IBM shop 的可能性中推测的那样,这个答案并不直接适用。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