Размер ключа DH должен быть кратен 64 и может находиться в диапазоне от 512 до 2048 (включительно).

У меня есть настройка, в которой я выполняю сборку из Jenkins на сервере Solaris, подключающемся через задачу sshexec в ANT.

При запуске сборки выдает следующую ошибку:

com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: размер ключа DH должен быть кратен 64 и может находиться в диапазоне от 512 до 2048 (включительно). Конкретный размер ключа 2047 не поддерживается.

После некоторого поиска в Google я узнал, что это может быть исправлено путем обновления до Java 8. Я сделал это, однако безуспешно.

Может кто-нибудь, пожалуйста, дайте мне знать, как это исправить?


person Nishant Kansal    schedule 02.11.2016    source источник
comment
Пожалуйста, посмотрите, поможет ли это — ibm.com/support/knowledgecenter/SSYKE2_6.0.0/   -  person Rao    schedule 02.11.2016
comment
Спасибо, Рао. К сожалению, общая статья не помогла решить проблему.   -  person Nishant Kansal    schedule 03.11.2016
comment
Используете ли вы размер ключа больше, чем 2048?   -  person Rao    schedule 03.11.2016
comment
Как его найти? Это скрипт сборки, который я выполняю через Jenkins: ‹sshexec host=my.host.com username=myuser password=mypass command=touch somefile trust=true /›   -  person Nishant Kansal    schedule 03.11.2016
comment
@NishantKansal Есть ли какие-нибудь обновления по этому поводу? Я испытываю ту же проблему.   -  person max.kuzmentsov    schedule 30.03.2017
comment
@NishantKansal, у вас есть новости по этому поводу? У меня такая же проблема   -  person 2dor    schedule 29.08.2017


Ответы (2)


Наше исправление:

Security.insertProviderAt(new BouncyCastleProvider(), 1)

мы использовали Jsch 0.1.54 напрямую для подключения к серверу SFT и увидели:

java.security.InvalidAlgorithmParameterException: размер ключа DH должен быть кратен 64 и может находиться в диапазоне от 512 до 4096 (включительно). Конкретный размер ключа 2047 не поддерживается

возможно связанные

person Brian Low    schedule 30.03.2017
comment
Я поддерживал автономную версию JSch, и мы можем незначительно зарегистрировать провайдера безопасности Bouncy Castle, не добавляя его в глобальный провайдер здесь — github.com/gaoxingliang/JSch - person scugxl; 26.07.2019

Библиотека JSch (используемая Jenkins или одним из его плагинов) использует поставщика Java JCE. Похоже, поставщик JCE вашей версии Java не может обрабатывать ключ длиной 2047 бит.

Вы можете поменять своего текущего поставщика JCE на поставщика BouncyCastle.

Хотя обходной путь @Brian Low описывает динамическую регистрацию BouncyCastle в качестве поставщика криптографических пакетов, я хотел бы отметить альтернативный способ, когда это делается путем настройки вашей среды через статическую регистрацию.

Найдите раздел «Подписанные файлы JAR» и выберите своего поставщика. Например, bcprov-jdk15to18-165.jar для любой версии Java от 5 до 8.

  • В 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.

person ravbarKomanda    schedule 31.03.2020