2017-01-17 12 views
0

Я использую SSHJ-библиотеку в проекте. Библиотека SSHJ использовала криптографию bouncycastle.Как реализовать bouncycastle в одну банку?

В eclipse все хорошо, но после того, как я использую одну банку, чтобы упаковать все в одном банке, я столкнулся с проблемами с bouncycastle lib. Bcprov-jdk15on-1.51.jar включен в пакет JAR в/lib, где находятся все остальные библиотеки, а также, например. sshj.jar.

В журнале у меня есть это:

Средний класс безопасности 'org.bouncycastle.jce.provider.BouncyCastleProvider' не найден

и это

ВНИМАНИЕ: Отключение высокопрочные шифры: сила шифрования, по-видимому, ограничена политикой JCE

И с функциональностью соединение SFTP в результате в:

net.schmizz.sshj.transport.TransportException: Невозможно достичь урегулирования: [Диффи-Хеллмана-group1-sha1, Диффи Hellman-группа обменных sha1] и [Дифй-Хеллман-группа обменного sha256]

То, что я пробовал:

  • Устанавливается Java JCE в/lib/security
    • Не знаете, почему вышеприведенное сообщение все еще всплывает об отключенных высокоуровневых шифрах?
  • Пробный «Security.addProvider (новый BouncyCastleProvider());» в коде

Это как вся работа "как и ожидалось":

  • Поставив "bcprov-jdk15on-1.51.jar", чтобы JAVA_HOME \ Lib \ вн \
    • к сожалению это вариант LAST для меня. У меня будет огромная головная боль для поддержки библиотек в ситуациях обновления версии Java.

Таким образом, очевидно, есть некоторые проблемы с путем к классам ОК libary? Где-то я кое-что прочитал о подписанной библиотеке поставщика безопасности, имеющей проблемы с реализацией, не совсем понял, что один ... Может быть, это и причина здесь?

Любые идеи по решению этой проблемы? Любая помощь по этому вопросу ценится, спасибо!

EDIT: Моя сборка.XML с предложенным кодом подписью внедрен:

<target name="package_x" depends="package_y"> 
    <!-- Create manifest file for x --> 
    <delete file="MANIFEST.MF"/> 
    <manifest file="MANIFEST.MF"> 
     <attribute name="Main-Class" value="com.simontuffs.onejar.Boot"/> 
     <attribute name="One-Jar-Main-Class" value="com.some.main.class.name"/> 
     <attribute name="Class-Path" value="some_other_libs lib/bcprov-jdk15on.jar ." /> 
    </manifest> 

    <!-- Copy properties file --> 
    <copy todir="${module.dist.dir}"> 
     <fileset dir="${module.x.build.dir}/classes"> 
      <include name="**/*.properties"/> 
     </fileset> 
    </copy> 

     <signjar destDir="${basedir}/distribute/lib/" 
       alias="server" keystore="${module.x.src.dir}/keystore/myCSC.jks" 
       storepass="pass" 
       preservelastmodified="true"> 
      <path> 
       <fileset dir="${basedir}/distribute/lib/" includes="bcprov-jdk15on.jar" /> 
      </path> 
      <flattenmapper /> 
     </signjar> 

    <!-- Construct the One-JAR file --> 
    <echo message="Creating a ONE-jar package of the x files..." /> 

    <one-jar destfile="${module.dist.dir}/${module.x.package}" manifest="MANIFEST.MF"> 
     <main> 
      <fileset dir="${module.x.build.dir}/classes/"> 
       <exclude name="x-config.properties"/> 
      </fileset> 
     </main> 

     <lib>    
      <fileset dir="${basedir}/distribute/lib/" /> 
      <fileset dir="${module.common.dist.dir}" /> 

     </lib> 
    </one-jar> 

     <signjar destDir="${module.dist.dir}" 
       alias="server" keystore="${module.agent.src.dir}/keystore/myCSC.jks" 
       storepass="pass" 
       preservelastmodified="true"> 
      <path> 
       <fileset dir="${module.dist.dir}" includes="**/*.jar" /> 
      </path> 
      <flattenmapper /> 
     </signjar> 

</target> 

ответ

0

Отвечая на мой собственный guestion:

Два решения:

  1. Добавить библиотеку в Java Lib/внутр
    • это на самом деле не было решением для меня, но может работать на кого-то другого.
  2. Использование JDotSoft JarClassLoader
    • Простой в использовании и, кажется, обеспечивает поддержку для добавления поставщиков JCE, таких как BouncyCastle.
    • добавил BC-jar в основной JAR с помощью Ant build: <zipfileset dir="/build/libsToInclude/" includes="*.jar" prefix="lib/"/> и оставил загрузчик классов.
1

Для implement a cryptographic provider необходим, что банка подписан

Если поставщик поставляют алгоритмы шифрования через CipherKeyAgreement, KeyGenerator, Mac или SecretKeyFactory классов, вам нужно будет подписать ваш JAR-файл, чтобы JCA мог аутентифицировать код во время выполнения.

Банки-баунсикасты подписаны. Вы переупаковали все классы в одну банку, но вы не сказали, что подписали ее, поэтому, я думаю, вы этого не делали. SSHJ, вероятно, использует некоторый алгоритм шифрования и не может инициализировать BouncyCastle

Варианты:

  • Подписать код сертификата код подписи

  • Deploy также bcprov-jdk15on-1.51.jar с приложением

+0

Хорошо, поэтому основная проблема заключается в том, что я «одноразовый» BC? И чтобы иметь возможность сделать это, я должен был бы подписать итоговый пакет с одним банком, я прав? Есть ли способ проверить это без покупки CodeSigningCert? Как-то с самоподпиской? – Jokkeri

+1

Да, проблема заключается в неподписанной «одной баночке». В приведенной ссылке вы можете увидеть процедуру получения сертификата подписи кода. Oracle выпускает сертификаты для тестирования (см. Http://www.oracle.com/technetwork/java/javase/tech/getcodesigningcertificate-361306.html#jcacodesigning). Вероятно, будет работать самозаверяющий сертификат с подходящим «ключ-употреблением». Необходимо будет импортировать публичную часть в доверительный магазин JVM и не будет работать с апплетами или JavaWebStart. – pedrofb

+0

Я помню, что у меня есть CodeSigningCertificate из другого проекта, но мне пока не повезло. Я добавил скрипт Ant для создания одной банки в оригинальное сообщение, что я делаю неправильно? В соответствии с этим постом http://stackoverflow.com/questions/19029575/bouncycastle-cryptography-provider-library-used-with-applet-on-java-7u40 Я снова подписываю BC с моим в CSC. – Jokkeri

 Смежные вопросы

  • Нет связанных вопросов^_^