DH密钥大小必须是64的倍数,并且只能在512到2048(含)之间

时间:2016-11-02 14:05:47

标签: java jenkins ssh ant solaris-10

我有一个设置,其中我在通过sshexec中的ANT任务连接的Solaris服务器上执行Jenkins的构建。

在对构建进行分类时,它会抛出以下错误:

  

com.jcraft.jsch.JSchException:Session.connect:   java.security.InvalidAlgorithmParameterException:DH密钥大小必须是   64的倍数,并且只能在512到2048(含)之间。该   不支持特定密钥大小2047。

经过一些谷歌搜索后,我才知道可以通过更新到Java 8来修复它。但是,我做到了,但仍然没有成功。

任何人都可以让我知道如何解决它吗?

2 个答案:

答案 0 :(得分:4)

我们的解决方案:

Security.insertProviderAt(new BouncyCastleProvider(), 1)

我们直接使用Jsch 0.1.54连接到SFT服务器并看到:

  

java.security.InvalidAlgorithmParameterException:DH密钥大小必须是64的倍数,并且只能在512到4096(含)之间。不支持特定密钥大小2047

可能相关

答案 1 :(得分:0)

JSch库(由Jenkins或其插件之一使用)利用Java的JCE提供程序。您的Java版本的JCE提供程序似乎无法处理2047位的密钥长度。

您可以将当前的JCE提供程序与 BouncyCastle 提供程序交换。

尽管@Brian Low的变通办法描述了BouncyCastle作为加密程序包提供程序的动态注册,但我想指出一种替代方法,即通过静态注册配置环境来完成。

找到“签名的JAR文件”部分,然后选择您的提供商。例如, bcprov-jdk15to18 -165.jar,适用于5到8之间的任何Java版本。

  • 在Jenkins中,转到“管理Jenkins-全局工具配置-JDK”以验证您的JDK位置(JAVA_HOME)。
  • 将JAR文件复制到$ JAVA_HOME / jre / lib / ext
  • 找到并编辑$ JAVA_HOME / jre / lib / security / java.security

在这里,我们将BouncyCastle提供程序插入第一个位置(最喜欢的位置),并更新其他人的偏好号。

示例:

#
# List of providers and their preference orders (see above):
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=sun.security.provider.Sun
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=sun.security.ec.SunEC
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
security.provider.6=com.sun.crypto.provider.SunJCE
security.provider.7=sun.security.jgss.SunProvider
security.provider.8=com.sun.security.sasl.Provider
security.provider.9=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.10=sun.security.smartcardio.SunPCSC
security.provider.11=sun.security.mscapi.SunMSCAPI

此时,重新启动Jenkins。