Я пытаюсь использовать библиотеку 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, и я попробовал следующие решения:
- Добавьте поставщика BC самостоятельно, включите sshjи BC JAR непосредственно как библиотека и использовать предоставленную область в maven, как указано здесь .Затем провайдер добавляется правильно, но все равно происходит сбой с сообщением об ошибке, приведенным выше.
- Поместите JAR-файлы BC в папку
jre/lib/ext
. - Измените файл java.security, как указано здесь .
- Проверьте, есть ли другая версия BC на пути к классам, как указано здесь .
Однако , если я создаюсвежий проект и включай sshj все работает просто отлично и как положено.Я сравнил команды, которые выполняют мой тест junit, в котором создается SSHClient, и в обоих проектах я могу найти sshj JAR и BC JAR, включенные в -classpath
.
. Я довольно новичок в maven и spring, поэтому яможет быть, что-то упускает, очевидно, почему все хорошо в новом проекте, а не в существующем, но я просто не могу понять это.
Если вам нужна дополнительная информация, я с удовольствием предоставлю их!