J'utilise la bibliothèque SSHJ dans un projet. La bibliothèque SSHJ a utilisé le crypto bouncycastle.

Dans eclipse, tout va bien, mais après avoir utilisé un seul bocal pour tout emballer dans un seul bocal, je suis confronté à des problèmes avec la lib bouncycastle. Le bcprov-jdk15on-1.51.jar est inclus dans le package JAR de / lib, où se trouvent toutes les autres bibliothèques, ainsi que par exemple. sshj.jar.

Sur le journal, j'ai ceux-ci:

Classe du fournisseur de sécurité 'org.bouncycastle.jce.provider.BouncyCastleProvider' introuvable

Et ça

AVERTISSEMENT: désactivation des chiffrements à haute résistance: les forces de chiffrement sont apparemment limitées par la politique JCE

Et avec la fonctionnalité, la connexion SFTP se traduit par:

net.schmizz.sshj.transport.TransportException: Impossible de trouver un règlement: [diffie-hellman-group1-sha1, diffie-hellman-group-exchange-sha1] et [diffie-hellman-group-exchange-sha256]

Ce que j'ai essayé:

  • Installation de Java JCE dans / lib / security
    • Vous ne savez pas pourquoi le message ci-dessus s'affiche toujours à propos des chiffrements à haute résistance désactivés?
  • J'ai essayé "Security.addProvider (new BouncyCastleProvider ());" dans du code

Voici comment tout fonctionne "comme prévu":

  • En plaçant le "bcprov-jdk15on-1.51.jar" dans JAVA_HOME \ lib \ ext \
    • malheureusement, c'est la DERNIÈRE option pour moi. J'aurai un énorme mal de tête pour maintenir les bibliothèques dans les situations de mise à jour de la version Java.

Alors, il y a clairement un problème de chemin de classe avec la bibliothèque de la Colombie-Britannique? Quelque part, j'ai lu quelque chose sur la bibliothèque de fournisseurs de sécurité signés ayant des problèmes de mise en œuvre, je n'ai pas bien compris celui-là ... Peut-être que c'est la raison ici aussi?

Des idées sur la façon dont ce problème est résolu? Toute aide sur ce problème est appréciée, merci!

EDIT: Mon build.xml avec la signature de code suggérée implémentée:

    <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>
1
Jokkeri 17 janv. 2017 à 10:02

2 réponses

Meilleure réponse

Répondre à ma propre question:

Deux solutions:

  1. Ajouter une bibliothèque à la lib / ext de Java
    • ce n'était vraiment pas une solution pour moi, mais cela pourrait fonctionner pour quelqu'un d'autre.
  2. Utilisez JDotSoft JarClassLoader
    • Simple à utiliser et semble prendre en charge l'ajout de fournisseurs JCE tels que Bouncycastle.
    • a ajouté le BC-jar dans le JAR principal par Ant build: <zipfileset dir="/build/libsToInclude/" includes="*.jar" prefix="lib/"/> et le classloader a fait le reste.
1
Jokkeri 20 mars 2017 à 08:04

Pour implémenter un fournisseur de chiffrement il faut que le pot soit signé

Si votre fournisseur fournit des algorithmes de chiffrement via les classes Cipher KeyAgreement, KeyGenerator, Mac ou SecretKeyFactory, vous devrez signer votre fichier JAR afin que le JCA peut authentifier le code lors de l'exécution.

Les bocaux Bouncycastle sont signés. Vous avez reconditionné toutes les classes dans un seul pot, mais vous n'avez pas dit que vous l'aviez signé, donc je suppose que vous ne l'avez pas fait. SSHJ utilise probablement un algorithme de chiffrement et n'a pas pu initialiser bouncycastle

Options:

  • Signez votre code avec un certificat de signature de code

  • Déployez également bcprov-jdk15on-1.51.jar avec votre application

1
pedrofb 17 janv. 2017 à 07:46