【问题标题】:Cannot connect to SFP sever using key file with JSch and Java 8无法使用带有 JSch 和 Java 8 的密钥文件连接到 SFTP 服务器
【发布时间】: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 调用任务?

标签: java jsch


【解决方案1】:

我们的问题似乎通过在调用 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();

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

【讨论】:

    【解决方案2】:

    我们已通过在 SFTP 服务器上启用 diffie-hellman-group14 算法解决了此类问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2023-03-16
      • 2018-11-17
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2012-09-02
      相关资源
      最近更新 更多