无法使用JSch和Java 8的密钥文件连接到SFP服务器

我正在尝试使用2048位RSA密钥文件连接到SFTP服务器。 它可以使用JSch在JRE版本7r45上运行良好,但是在针对JRE的版本8r31运行时,我得到了以下exception。

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。

我已经看到对此exception的其他引用建议用BouncyCastle替换默认的Java JCE提供程序,但为什么java 7和java 8之间会有区别? 我通过运行Security.addProvider(new BouncyCastleProvider());尝试这个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(); 

[我们控制客户端,但不控制我们无法连接的服务器。]

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