0

For encryption/decryption purpose we are using BouncyCastle jar, at the same time we are using SMB connector. This is causing the conflict of jar issue. We even tried to import bouncyCastle as System jar by wrapping it under wrapper jar but even it is failing with following error :: java.lang.SecurityException: class "org.bouncycastle.asn1.DEREncodable"'s signer information does not match signer information of other classes in the same package

We are using Mule 4.3 version and using Maven as Project build tool . Can someone help us to get rid of this issue.

Note:: We are performing encryption/decryption in java class. Inside our wrapper jar we are using following dependencies.

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpg-jdk15</artifactId>
<version>1.45</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.61</version>
</dependency>

Mule Application Pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>demo-module</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>mule-application</packaging>

    <name>demo-module</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <app.runtime>4.3.0</app.runtime>
        <mule.maven.plugin.version>3.3.5</mule.maven.plugin.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            <plugin>
                <groupId>org.mule.tools.maven</groupId>
                <artifactId>mule-maven-plugin</artifactId>
                <version>${mule.maven.plugin.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <deploymentType>cloudhub</deploymentType>
                    <cloudHubDeployment>
                        <applicationName>${customApplicatioName}</applicationName>
                        <muleVersion>${app.runtime}</muleVersion>
                        <username>${anypoint_username}</username>
                        <password>${anypoint_password}</password>
                        <environment>${mule_env}</environment>
                        <properties>
                            <mule.env>${mule_env}</mule.env>
                            <securekey>${securekey}</securekey>
                        </properties>
                        <region>us-east-1</region>
                        <workerType>${mule_worker_type}</workerType>
                        <workers>${mule_workers}</workers>
                        <persistentQueues>true</persistentQueues>
                        <objectStoreV2>true</objectStoreV2>
                    </cloudHubDeployment>
                    <sharedLibraries>
                        <sharedLibrary>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                        </sharedLibrary>
                        <sharedLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-core</artifactId>
                        </sharedLibrary>
                        <sharedLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-beans</artifactId>
                        </sharedLibrary>
                        <sharedLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-context</artifactId>
                        </sharedLibrary>
                        <sharedLibrary>
                            <groupId>org.springframework.security</groupId>
                            <artifactId>spring-security-config</artifactId>
                        </sharedLibrary>
                        <sharedLibrary>
                            <groupId>org.springframework.security</groupId>
                            <artifactId>spring-security-core</artifactId>
                        </sharedLibrary>
                    </sharedLibraries>
                </configuration>
                <executions>
                    <execution>
                        <id>default-deploy</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <id>deploy</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                        <configuration>
                            <classifier>mule-application</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <compilerArgs>
                        <args>-parameters</args>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.mule.connectors</groupId>
            <artifactId>mule-http-connector</artifactId>
            <version>1.5.16</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.mule.connectors</groupId>
            <artifactId>mule-sockets-connector</artifactId>
            <version>1.1.6</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.mule.connectors</groupId>
            <artifactId>mule-db-connector</artifactId>
            <version>1.7.0</version>
            <classifier>mule-plugin</classifier>
        </dependency>

        <dependency>
            <groupId>org.mule.connectors</groupId>
            <artifactId>mule-vm-connector</artifactId>
            <version>2.0.0</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
        <dependency>
            <groupId>com.mulesoft.connectors</groupId>
            <artifactId>mule-cloudhub-connector</artifactId>
            <version>1.0.1</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.mule.connectors</groupId>
            <artifactId>mule-sftp-connector</artifactId>
            <version>1.3.7</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.mule.connectors</groupId>
            <artifactId>mule-objectstore-connector</artifactId>
            <version>1.1.4</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>com.mulesoft.connectors</groupId>
            <artifactId>mule-amazon-s3-connector</artifactId>
            <version>5.6.0</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.mule.module</groupId>
            <artifactId>mule-java-module</artifactId>
            <version>1.2.6</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>com.mulesoft.connectors</groupId>
            <artifactId>mule-amazon-sqs-connector</artifactId>
            <version>5.5.0</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <!-- <dependency> <groupId>org.mule.modules</groupId> <artifactId>smb-connector</artifactId> 
            <version>1.2.1</version> </dependency> -->
        <dependency>
            <groupId>com.mulesoft.connectors</groupId>
            <artifactId>mule-smb-connector</artifactId>
            <version>2.0.0</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-compression-module</artifactId>
            <version>2.1.0</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>com.mulesoft.modules</groupId>
            <artifactId>mule-secure-configuration-property-module</artifactId>
            <version>1.2.2</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>eu.agno3.jcifs</groupId>
            <artifactId>jcifs-ng</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-spring-module</artifactId>
            <version>1.3.3</version>
            <classifier>mule-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.12.150</version>
        </dependency>
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.9</version>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0</version>
        </dependency>
        <!-- Adding System jar which has bouncy castle jars wrapped -->
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>encryptDecrypt</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>anypoint-exchange-v2</id>
            <name>Anypoint Exchange</name>
            <url>https://maven.anypoint.mulesoft.com/api/v2/maven</url>
            <layout>default</layout>
        </repository>
        <repository>
            <id>mulesoft-releases</id>
            <name>MuleSoft Releases Repository</name>
            <url>https://repository.mulesoft.org/releases/</url>
            <layout>default</layout>
        </repository>
        <!-- Adding repository which downloads wrapper jar from libs folder kept at project level -->
        <repository>
            <id>in-project</id>
            <name>In Project Repo</name>
            <url>file://${project.basedir}/libs</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>mulesoft-releases</id>
            <name>mulesoft release repository</name>
            <layout>default</layout>
            <url>https://repository.mulesoft.org/releases/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

Stacktrace when directly using bouncyCastle jar in mule pom::

Root Exception stack trace:
java.lang.SecurityException: class "org.bouncycastle.asn1.ASN1ObjectIdentifier"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:895)
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:665)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:758)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader.findLocalClass(FineGrainedControlClassLoader.java:178)
    at org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader.loadClass(FineGrainedControlClassLoader.java:90)
    at org.mule.runtime.module.artifact.api.classloader.MuleArtifactClassLoader.loadClass(MuleArtifactClassLoader.java:258)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at jcifs.smb.NtlmPasswordAuthenticator.createContext(NtlmPasswordAuthenticator.java:185)
    at jcifs.smb.SmbSessionImpl.createContext(SmbSessionImpl.java:689)
    at jcifs.smb.SmbSessionImpl.sessionSetupSMB2(SmbSessionImpl.java:536)
    at jcifs.smb.SmbSessionImpl.sessionSetup(SmbSessionImpl.java:483)
    at jcifs.smb.SmbSessionImpl.send(SmbSessionImpl.java:369)
    at jcifs.smb.SmbSessionImpl.send(SmbSessionImpl.java:347)
    at jcifs.smb.SmbTreeImpl.treeConnect(SmbTreeImpl.java:611)
    at jcifs.smb.SmbTreeImpl.send(SmbTreeImpl.java:429)
    at jcifs.smb.SmbTreeImpl.send(SmbTreeImpl.java:405)
    at jcifs.smb.SmbTransportImpl.getDfsReferrals(SmbTransportImpl.java:1723)
    at jcifs.smb.DfsImpl.getDcReferrals(DfsImpl.java:192)
    at jcifs.smb.DfsImpl.getDc(DfsImpl.java:233)
    at jcifs.smb.DfsImpl.getTrustedDomains(DfsImpl.java:112)
    at jcifs.smb.DfsImpl.resolve(DfsImpl.java:352)
    at jcifs.smb.DfsImpl.resolve(DfsImpl.java:326)
    at jcifs.smb.SmbTreeConnection.connectHost(SmbTreeConnection.java:530)
    at jcifs.smb.SmbTreeConnection.connectHost(SmbTreeConnection.java:489)
    at jcifs.smb.SmbTreeConnection.connect(SmbTreeConnection.java:465)
    at jcifs.smb.SmbTreeConnection.connectWrapException(SmbTreeConnection.java:426)
    at jcifs.smb.SmbFile.ensureTreeConnected(SmbFile.java:558)
    at jcifs.smb.SmbEnumerationUtil.doEnum(SmbEnumerationUtil.java:221)
    at jcifs.smb.SmbEnumerationUtil.listFiles(SmbEnumerationUtil.java:279)
    at jcifs.smb.SmbFile.listFiles(SmbFile.java:1206)
    at com.rue21.support.FilterSMBFiles.filterSMBFiles(FilterSMBFiles.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.mule.extensions.java.internal.util.MethodInvoker.doInvoke(MethodInvoker.java:99)
    at org.mule.extensions.java.internal.util.MethodInvoker.invokeMethod(MethodInvoker.java:85)
    at org.mule.extensions.java.internal.util.MethodInvoker.invokeMethod(MethodInvoker.java:49)
    at org.mule.extensions.java.internal.operation.JavaInvokeOperations.invokeStatic(JavaInvokeOperations.java:118)
    at org.mule.extensions.java.internal.operation.JavaInvokeOperations$invokeStatic$MethodComponentExecutor.execute(Unknown Source)
    at org.mule.runtime.module.extension.internal.runtime.execution.GeneratedMethodComponentExecutor.execute(GeneratedMethodComponentExecutor.java:92)
    at org.mule.runtime.module.extension.internal.runtime.execution.CompletableMethodOperationExecutor.doExecute(CompletableMethodOperationExecutor.java:26)
    at org.mule.runtime.module.extension.internal.runtime.execution.AbstractCompletableMethodOperationExecutor.execute(AbstractCompletableMethodOperationExecutor.java:58)
    at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.executeCommand(DefaultExecutionMediator.java:206)
    at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.executeWithInterceptors(DefaultExecutionMediator.java:190)
    at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.lambda$execute$1(DefaultExecutionMediator.java:109)
    at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.lambda$new$0(DefaultExecutionMediator.java:59)
    at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.execute(DefaultExecutionMediator.java:108)
    at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.executeOperation(ComponentMessageProcessor.java:483)
    at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.prepareAndExecuteOperation(ComponentMessageProcessor.java:666)
    at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.lambda$onEventSynchronous$19(ComponentMessageProcessor.java:437)
    at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.onEventSynchronous(ComponentMessageProcessor.java:440)
    at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.lambda$null$9(ComponentMessageProcessor.java:358)
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onNext(FluxPeekFuseable.java:482)
    at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:287)
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onNext(FluxPeekFuseable.java:496)
    at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:425)
    at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:420)
    at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:127)
    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:345)
    at reactor.core.publisher.FluxSubscribeOnValue$ScheduledScalar.run(FluxSubscribeOnValue.java:178)
    at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:50)
    at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:27)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.mule.service.scheduler.internal.AbstractRunnableFutureDecorator.doRun(AbstractRunnableFutureDecorator.java:111)
    at org.mule.service.scheduler.internal.RunnableFutureDecorator.run(RunnableFutureDecorator.java:54)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

********************************************************************************
aled
  • 21,330
  • 3
  • 27
  • 34
  • Please add the pom of the Mule application project where the actual conflict is happening. – aled Feb 24 '22 at 10:17
  • Added Mule applications pom.xml – Paresh Shidruk Feb 24 '22 at 10:57
  • Thanks. Some more questions: Are you sure that the conflict is specifically with the SMB connector? If you remove that connector, the problem goes away? If there is a Java stack trace for the error please also add it to the question. – aled Feb 24 '22 at 11:22
  • Yes we are sure conflicts are from SMB connector. We can not remove the connector as already we have process which uses this connector. I have added StackTrace for more details – Paresh Shidruk Feb 24 '22 at 11:52
  • 1
    Does this answer your question? [Java SecurityException: signer information does not match](https://stackoverflow.com/questions/2877262/java-securityexception-signer-information-does-not-match) – Joe Feb 24 '22 at 11:57
  • It is not a duplicated question because Mule has some specific features related to classloading. – aled Feb 24 '22 at 14:30

1 Answers1

0

Wrapping Java code in a Jar file doesn't wraps it's dependencies for Maven. It is as if they were added to the main project.

Mule has a way to deal with that issue. If you wrap your Java code in a Mule module the dependencies should be "hidden" from the other connectors. A Mule module is technically the same as a Mule connector, though it is not expected to connect to an external system and just call Java code. Use the Mule SDK and only wrap the code into operations. You can reuse your Jar file in the module.

aled
  • 21,330
  • 3
  • 27
  • 34