java - 无法使用 JSch 和 Java 8 的 key 文件连接到 SFTP 服务器

标签 java jsch

我正在尝试使用 2048 位 RSA key 文件连接到 SFTP 服务器。它使用 JSch 针对 JRE 的 7r45 版运行良好,但在针对 JRE 的 8r31 版运行时出现以下异常。

com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size 必须是 64 的倍数,并且只能在 512 到 2048(含)之间。

这不是有限 Java 安全策略的问题,因为我已经尝试过使用和不使用两个版本的 java 的无限强度 jars。

我看到其他关于此异常的引用资料建议用 BouncyCaSTLe 提供程序替换默认的 java JCE 提供程序,但为什么 java 7 和 java 8 之间会有区别?我确实通过运行来尝试这个 Security.addProvider(new BouncyCaSTLeProvider()); 在程序启动时,但似乎没有任何区别。

最佳答案

我们案例中的问题似乎可以通过在调用 session.connect() 之前删除 diffie-hellman-group-exchange-sha1 来解决/解决

String kex = session.getConfig("kex");
System.out.println("old kex:" + kex);
kex = kex.replace(",diffie-hellman-group-exchange-sha1", "");
session.setConfig("kex", kex);
System.out.println("new kex:" + session.getConfig("kex"));
session.connect();

[我们控制客户端,但不控制我们未能连接到的服务器。]

关于java - 无法使用 JSch 和 Java 8 的 key 文件连接到 SFTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31041431/

相关文章:

java - 使用Java通过SSH隧道传输文件

java - 流程执行Java JSsh

java - 具有可选多个边界的泛型,例如列表<?扩展整数或字符串>

java - 子串方法

java - Linux命令执行后读取输出将陷入无限循环

java - sudo 登录后使用 Java JSch 程序执行多个 bash 命令

java - 为什么 thymeleaf 布局中包含的图像需要很长时间才能显示?

java - "Could not find mopub-android-sdk.apk!"

java - AndEngine GenericPool 带有计时器,从池中添加 Sprite

java - 如何应对交互式 Linux 命令?