«JCE не может аутентифицировать провайдера BC» при использовании sshj - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь использовать библиотеку sshj для создания SFTP-клиента в существующем проекте моей компании.Однако если я создаю экземпляр SSHClient, я получаю сообщение об ошибке:

[main] INFO net.schmizz.sshj.common.SecurityUtils - Registration of Security Provider 'org.bouncycastle.jce.provider.BouncyCastleProvider' unexpectedly failed
java.lang.SecurityException: JCE cannot authenticate the provider BC
    at javax.crypto.JceSecurity.getInstance(JceSecurity.java:118)
    at javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:270)
    at net.schmizz.sshj.common.SecurityUtils.registerSecurityProvider(SecurityUtils.java:88)
    at net.schmizz.sshj.common.SecurityUtils.register(SecurityUtils.java:267)
    at net.schmizz.sshj.common.SecurityUtils.isBouncyCastleRegistered(SecurityUtils.java:245)
    at net.schmizz.sshj.DefaultConfig.<init>(DefaultConfig.java:79)
    at net.schmizz.sshj.SSHClient.<init>(SSHClient.java:134)
[... junit stacktrace ...]
Caused by: java.util.jar.JarException: Class is on the bootclasspath
    at javax.crypto.JarVerifier.verify(JarVerifier.java:286)
    at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:164)
    at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:190)
    at javax.crypto.JceSecurity.getInstance(JceSecurity.java:114)
    ... 40 more
[main] INFO net.schmizz.sshj.common.SecurityUtils - BouncyCastle not registered, using the default JCE provider
[main] INFO net.schmizz.sshj.transport.random.JCERandom - Creating new SecureRandom.

Приложение использует maven для включения зависимостей, и я добавил его следующим образом:

<dependency>
  <groupId>com.hierynomus</groupId>
  <artifactId>sshj</artifactId>
  <version>0.27.0</version>
</dependency>

Библиотека sshjвключает зависимости bouncycastle (BC) от bcpkix-jdk15on v1.60 и bcprov-jdk15on v1.60, и я попробовал следующие решения:

  1. Добавьте поставщика BC самостоятельно, включите sshjи BC JAR непосредственно как библиотека и использовать предоставленную область в maven, как указано здесь .Затем провайдер добавляется правильно, но все равно происходит сбой с сообщением об ошибке, приведенным выше.
  2. Поместите JAR-файлы BC в папку jre/lib/ext.
  3. Измените файл java.security, как указано здесь .
  4. Проверьте, есть ли другая версия BC на пути к классам, как указано здесь .

Однако , если я создаюсвежий проект и включай sshj все работает просто отлично и как положено.Я сравнил команды, которые выполняют мой тест junit, в котором создается SSHClient, и в обоих проектах я могу найти sshj JAR и BC JAR, включенные в -classpath.

. Я довольно новичок в maven и spring, поэтому яможет быть, что-то упускает, очевидно, почему все хорошо в новом проекте, а не в существующем, но я просто не могу понять это.

Если вам нужна дополнительная информация, я с удовольствием предоставлю их!

1 Ответ

0 голосов
/ 15 февраля 2019

В Java есть 2 пути к классам, bootclasspath и обычный classpath.Загрузочный путь находится там, где находятся java.* и javax.* (jre / lib / rt.jar).Но поскольку он не загружается системным загрузчиком классов, он не поддерживает добавление подписанных / проверенных файлов JAR.Вы должны убедиться, что банки BouncyCastle находятся на обычном пути к классам (как указано с помощью опции -classpath в JRE / JDK

...