10 Replies Latest reply on Jul 11, 2016 2:16 PM by sharkbite

    Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final

    sharkbite

      Hi

       

      When I run a class using Standalone Java and I have signed the following jars it works:

      bcpg-jdk15on-1.49.jar

      bcprov-jdk15on-1.49.jar

      bcprov-ext-jdk15on-1.49.jar

       

      BUT when I try to execute the same piece of code on WildFly i get the following error:

      2016-07-07 13:04:21,638 DEBUG CardOrderEncryptServlet (CardOrderEncryptServlet.java:143)- encKey:org.bouncycastle.openpgp.PGPPublicKey@24336846

      2016-07-07 13:04:21,871 DEBUG systemErrorLogger (Log4jConfigurator.java:131)- *$#org.bouncycastle.openpgp.PGPException: exception constructing public key

      13:04:21,875 ERROR [stderr] (default task-9) org.bouncycastle.openpgp.PGPException: exception constructing public key

      2016-07-07 13:04:21,875 ERROR stderr (AbstractLoggingWriter.java:71)- org.bouncycastle.openpgp.PGPException: exception constructing public key

      2016-07-07 13:04:21,876 DEBUG systemErrorLogger (Log4jConfigurator.java:131)- *$#java.security.spec.InvalidKeySpecException: key spec not recognised

      13:04:21,876 ERROR [stderr] (default task-9) java.security.spec.InvalidKeySpecException: key spec not recognised

      2016-07-07 13:04:21,876 ERROR stderr (AbstractLoggingWriter.java:71)- java.security.spec.InvalidKeySpecException: key spec not recognised

      2016-07-07 13:04:21,876 DEBUG systemErrorLogger (Log4jConfigurator.java:131)- *$# at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source)

      13:04:21,877 ERROR [stderr] (default task-9) at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source)

      2016-07-07 13:04:21,877 ERROR stderr (AbstractLoggingWriter.java:71)- at org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(Unknown Source)

      2016-07-07 13:04:21,877 DEBUG systemErrorLogger (Log4jConfigurator.java:131)- *$# at org.bouncycastle.jcajce.provider.asymmetric.elgamal.KeyFactorySpi.engineGeneratePublic(Unknown Source)

      13:04:21,877 ERROR [stderr] (default task-9) at org.bouncycastle.jcajce.provider.asymmetric.elgamal.KeyFactorySpi.engineGeneratePublic(Unknown Source)

       

      Why does this happen?

       

      thanks,

      Daslan

        • 1. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
          mchoma

          Hi,

           

          are you sure same java is used for standalone java program and for starting Wildfly? Can you mention this java version, please?

           

          Also note Wildfly 10.0.0.Final has some bouncy castle jars bundled in. See wildfly-10.0.0.Final/modules/system/layers/base/org/bouncycastle/main, where for instance bcprov-jdk15on-1.52.jar is located. So, check if possible it can't be problem of different versions on classpath.

           

          Can you post code you are trying to run?

           

          Martin

          • 2. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
            mchoma
            • 3. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
              sharkbite

              Hi Martin

               

              Yes I noticed bcprov-jdk15on-1.52.jar. I get compile errors when I using these jars. I will post the error sometime today

               

              Theo code can be found here: https://drive.google.com/open?id=0Bx_7eiy_kFj7ZXhacmlSNnFYclU

               

              Thanks,

              Daslan

              • 4. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                sharkbite

                Hi Martin

                 

                I will also try the link you gave me.

                 

                Thanks,

                Daslan

                • 5. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                  sharkbite

                  Hi

                   

                  I have upgraded to 1.52 and created a jboss-deployment-structure.xml as pointed out in http://stackoverflow.com/questions/36252742/wildfly-10-bouncycastlecrypto-ecdsa-key-spec-not-recognized


                  See CardOrderEncryptServletDrive.java - Google Drive for update version

                   

                   

                  I have also marked them libs in the pom.xml as provided:

                  <dependency>
                  <groupId>org.bouncycastle</groupId>
                  <artifactId>bcprov-jdk15on</artifactId>
                  <version>1.52</version>
                  <scope>provided</scope>
                  </dependency>

                   

                  <dependency>
                  <groupId>org.bouncycastle</groupId>
                  <artifactId>bcpg-jdk15on</artifactId>
                  <version>1.52</version>
                  <scope>provided</scope>
                  </dependency>

                   

                  The jboss-deployment-structure.xml is sitting in WEB-INF

                   

                  When I deploy I get a java.lang.NoClassDefFoundError.

                  • 6. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                    sharkbite

                    Here is the error here.

                     

                     

                    Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class za.co.fnds.processor.web.card.CardOrderEncryptServlet with ClassLoader ModuleClassLoader for Module "deployment.fnds-ear-1.0.0.ear.fndsprocessor-web-1.0.0.war:main" from Service Module Loader

                            at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)

                            at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57)

                            at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:106)

                            at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:91)

                            at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:76)

                            at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)

                            ... 5 more

                    Caused by: java.lang.NoClassDefFoundError: org/bouncycastle/openpgp/PGPException

                            at java.lang.Class.getDeclaredFields0(Native Method)

                            at java.lang.Class.privateGetDeclaredFields(Class.java:2583)

                            at java.lang.Class.getDeclaredFields(Class.java:1916)

                            at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:72)

                            at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)

                            ... 10 more

                    Caused by: java.lang.ClassNotFoundException: org.bouncycastle.openpgp.PGPException from [Module "deployment.fnds-ear-1.0.0.ear.fndsprocessor-web-1.0.0.war:main" from Service Module Loader]

                            at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)

                            at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)

                            at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)

                            at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)

                            ... 15 more

                    • 7. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                      sharkbite

                      I turned on I turned on verbose logging of classloaders and bcprov-jdk15on-1.52.jar and bcpg-jdk15on-1.52.jar are not loaded by jboss-deployment-structure.xml

                       

                      Why is this not working?

                       

                      If I mark bcprov-jdk15on-1.52.jar and bcpg-jdk15on-1.52.jar compile in pom.xml.

                       

                      If is loaded from

                      vfs:/content/fnds-ear-1.0.0.ear/lib/bcprov-jdk15on-1.52.jar!/

                       

                      If I run jarsigner -verify -verbose -certs bcprov-jdk15on-1.52.jar 

                      in fnds-ear-1.0.0.ear/lib/bcprov-jdk15on-1.52.jar  it verifies



                      I htink the probleh here is it cannot verify the compressed version  vfs:/content/fnds-ear-1.0.0.ear/lib/bcprov-jdk15on-1.52.jar!/

                      • 8. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                        mchoma

                        org.bouncycastle.openpgp.PGPException is contained in bcpg-jdk15on-*.jar, which is not bundled in wildfly.

                         

                        It seems to me you have to ensure you use only jars from fnds-ear-1.0.0.ear/lib/  it means exclude org.bouncycastle in jboss-deployment-structure.xml (https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly). And check you dont have these jars in $JAVA_HOME/lib/ext. 


                         

                        • 9. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                          sharkbite

                          I solved my problem

                           

                          mark them provided so they were not bundled with ear. Added this:

                           

                                 

                                      <global-modules>

                                          <module name="org.bouncycastle" slot="main"/>

                                      </global-modules>

                           

                          to standalone-full under <subsystem xmlns="urn:jboss:domain:ee:4.0">

                          • 10. Re: Pgp Encryption works on Java 8 but not WildFly 10.0.0.Final
                            sharkbite

                            Thank you for your help Martin!