DH密钥长度必须是64的倍数,且只能在512 ~ 2048(含512)之间



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

触发构建时,抛出以下错误:

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

在谷歌搜索之后,我知道这个问题可以通过升级到Java 8来解决。我那样做了,然而,仍然没有成功。

谁能告诉我怎么修理它?

修复方法:

Security.insertProviderAt(new BouncyCastleProvider(), 1)

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

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

可能相关

  • JDK-8164963:使用JSCH库升级JDK后InvalidAlgorithmParameterException素数大小问题
  • DHGEX在Java 8下使用2048位密钥失败,但使用1024位密钥成功

JSch库(由Jenkins或它的一个插件使用)使用Java的JCE提供程序。看来你的Java版本的JCE提供程序无法处理2047位的密钥长度。

你可以把当前的JCE提供程序换成BouncyCastle提供程序。

虽然@Brian Low的解决方案描述了BouncyCastle作为加密包提供程序的动态注册,但我想指出另一种方法,即通过静态注册配置您的环境。

  • 从bouncycastle.org下载BouncyCastle提供商

查找"Signed JAR Files"部分并选择您的提供程序。例如,bcprov-jdk15to18-165.jar,适用于5到8之间的任何Java版本。

  • 在Jenkins中进入Manage Jenkins - Global Tool Configurations - 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

相关内容

  • 没有找到相关文章

最新更新