我有一个设置,其中我在通过sshexec
中的ANT
任务连接的Solaris服务器上执行Jenkins的构建。
在对构建进行分类时,它会抛出以下错误:
com.jcraft.jsch.JSchException:Session.connect: java.security.InvalidAlgorithmParameterException:DH密钥大小必须是 64的倍数,并且只能在512到2048(含)之间。该 不支持特定密钥大小2047。
经过一些谷歌搜索后,我才知道可以通过更新到Java 8来修复它。但是,我做到了,但仍然没有成功。
任何人都可以让我知道如何解决它吗?
答案 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版本。
在这里,我们将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。