【发布时间】:2015-06-25 04:50:19
【问题描述】:
我正在尝试使用 2048 位 RSA 密钥文件连接到 SFTP 服务器。使用 JSch 在 JRE 的 7r45 版本上运行良好,但在 JRE 的 8r31 版本上运行时出现以下异常。
com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive).
这不是有限的 Java 安全策略的问题,因为我已经在两个版本的 java 中尝试过使用和不使用无限强度的 jar。
我已经看到其他对这个异常的引用,建议用 BouncyCastle 替换默认的 java JCE 提供程序,但为什么 java 7 和 java 8 之间会有区别?我确实通过运行尝试过
Security.addProvider(new BouncyCastleProvider()); 在程序启动时,但似乎没有任何区别。
【问题讨论】:
-
在 Java 8 环境中,我在从 ant 调用
scp任务(取决于 JSch)时也遇到了同样的错误。唯一的细微差别是我看到:com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) -
我刚刚遇到了类似的行为,我使用 1024 位密钥成功连接,但使用 2048 位密钥连接失败。我向 JSCH 添加了调试,并且能够确定服务器(它使用 1024 位密钥)正在向我发送一些长度为 2047 位的不同密钥,JCE 代码拒绝这些密钥不是 64 的倍数。我还不知道为什么,我也没有测试过 Java 7r45 或更高版本是否解决了这个问题。
-
@JulienChastang,您的问题似乎是您使用 Java 1.6 或 1.7 运行,它们不允许 2048 位密钥。即使您在系统上安装了 Java 8,Ant 也可能使用较早的 JRE 调用任务?