Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

serenity-browsermob-plugin: bcprov-jdk15on version incorrecty upgraded #3233

Closed
StevenKolamkuzhiyil opened this issue Aug 19, 2023 · 4 comments

Comments

@StevenKolamkuzhiyil
Copy link

Hello,

i was trying to get the serenity-browsermob-plugin to run with Serenity 3.9.8. During that process i ran into following problem:

13:54:54.879 [LittleProxy-0-ClientToProxyWorker-0] WARN  i.n.util.concurrent.DefaultPromise - An exception was thrown by org.littleshoot.proxy.impl.ConnectionFlow$2.operationComplete()
com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: org/bouncycastle/asn1/bsi/BSIObjectIdentifiers
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2053)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3966)
	at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4863)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.getHostnameImpersonatingSslContext(ImpersonatingMitmManager.java:242)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.clientSslEngineFor(ImpersonatingMitmManager.java:223)
	at org.littleshoot.proxy.impl.ProxyToServerConnection$3.execute(ProxyToServerConnection.java:724)
	at org.littleshoot.proxy.impl.ConnectionFlow.doProcessCurrentStep(ConnectionFlow.java:140)
	at org.littleshoot.proxy.impl.ConnectionFlow.processCurrentStep(ConnectionFlow.java:128)
	at org.littleshoot.proxy.impl.ConnectionFlow.advance(ConnectionFlow.java:90)
	at org.littleshoot.proxy.impl.ConnectionFlowStep.onSuccess(ConnectionFlowStep.java:83)
	at org.littleshoot.proxy.impl.ConnectionFlow$2.operationComplete(ConnectionFlow.java:149)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
	at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
	at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
	at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
	at org.littleshoot.proxy.impl.ConnectionFlow.doProcessCurrentStep(ConnectionFlow.java:140)
	at org.littleshoot.proxy.impl.ConnectionFlow.access$000(ConnectionFlow.java:14)
	at org.littleshoot.proxy.impl.ConnectionFlow$1.run(ConnectionFlow.java:124)
	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
	at io.netty.util.concurrent.PromiseTask.run(PromiseTask.java:106)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NoClassDefFoundError: org/bouncycastle/asn1/bsi/BSIObjectIdentifiers
	at org.bouncycastle.operator.jcajce.OperatorHelper.<clinit>(Unknown Source)
	at org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.<init>(Unknown Source)
	at net.lightbody.bmp.mitm.tools.BouncyCastleSecurityProviderTool.getCertificateSigner(BouncyCastleSecurityProviderTool.java:333)
	at net.lightbody.bmp.mitm.tools.BouncyCastleSecurityProviderTool.createServerCertificate(BouncyCastleSecurityProviderTool.java:99)
	at net.lightbody.bmp.mitm.tools.DefaultSecurityProviderTool.createServerCertificate(DefaultSecurityProviderTool.java:43)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.createImpersonatingSslContext(ImpersonatingMitmManager.java:308)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.createImpersonatingSslContext(ImpersonatingMitmManager.java:271)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.access$3(ImpersonatingMitmManager.java:264)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager$3.call(ImpersonatingMitmManager.java:245)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager$3.call(ImpersonatingMitmManager.java:1)
	at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4868)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3533)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2282)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2159)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2049)
	... 28 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.bsi.BSIObjectIdentifiers
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 43 common frames omitted
Aug. 19, 2023 1:54:54 PM org.openqa.selenium.devtools.CdpVersionFinder findNearestMatch
WARNUNG: Unable to find an exact match for CDP version 116, so returning the closest version found: 114
13:54:55.092 [LittleProxy-0-ClientToProxyWorker-1] WARN  i.n.util.concurrent.DefaultPromise - An exception was thrown by org.littleshoot.proxy.impl.ConnectionFlow$2.operationComplete()
com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Could not initialize class org.bouncycastle.operator.jcajce.OperatorHelper
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2053)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3966)
	at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4863)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.getHostnameImpersonatingSslContext(ImpersonatingMitmManager.java:242)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.clientSslEngineFor(ImpersonatingMitmManager.java:223)
	at org.littleshoot.proxy.impl.ProxyToServerConnection$3.execute(ProxyToServerConnection.java:724)
	at org.littleshoot.proxy.impl.ConnectionFlow.doProcessCurrentStep(ConnectionFlow.java:140)
	at org.littleshoot.proxy.impl.ConnectionFlow.processCurrentStep(ConnectionFlow.java:128)
	at org.littleshoot.proxy.impl.ConnectionFlow.advance(ConnectionFlow.java:90)
	at org.littleshoot.proxy.impl.ConnectionFlowStep.onSuccess(ConnectionFlowStep.java:83)
	at org.littleshoot.proxy.impl.ConnectionFlow$2.operationComplete(ConnectionFlow.java:149)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
	at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
	at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
	at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
	at org.littleshoot.proxy.impl.ConnectionFlow.doProcessCurrentStep(ConnectionFlow.java:140)
	at org.littleshoot.proxy.impl.ConnectionFlow.access$000(ConnectionFlow.java:14)
	at org.littleshoot.proxy.impl.ConnectionFlow$1.run(ConnectionFlow.java:124)
	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
	at io.netty.util.concurrent.PromiseTask.run(PromiseTask.java:106)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.bouncycastle.operator.jcajce.OperatorHelper
	at org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.<init>(Unknown Source)
	at net.lightbody.bmp.mitm.tools.BouncyCastleSecurityProviderTool.getCertificateSigner(BouncyCastleSecurityProviderTool.java:333)
	at net.lightbody.bmp.mitm.tools.BouncyCastleSecurityProviderTool.createServerCertificate(BouncyCastleSecurityProviderTool.java:99)
	at net.lightbody.bmp.mitm.tools.DefaultSecurityProviderTool.createServerCertificate(DefaultSecurityProviderTool.java:43)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.createImpersonatingSslContext(ImpersonatingMitmManager.java:308)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.createImpersonatingSslContext(ImpersonatingMitmManager.java:271)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager.access$3(ImpersonatingMitmManager.java:264)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager$3.call(ImpersonatingMitmManager.java:245)
	at net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager$3.call(ImpersonatingMitmManager.java:1)
	at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4868)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3533)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2282)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2159)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2049)
	... 28 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: org/bouncycastle/asn1/bsi/BSIObjectIdentifiers [in thread "LittleProxy-0-ClientToProxyWorker-0"]
	at org.bouncycastle.operator.jcajce.OperatorHelper.<clinit>(Unknown Source)
	... 42 common frames omitted

Process finished with exit code 130

After debugging that issue i found out that there is a version conflict in the serenity-browsermob-plugin:

net.serenity-bdd:serenity-browsermob-plugin:398
    net.lightbody.bmp:browsermob-core:2.1.5
        org.bouncycastle:bcpkix-jdk15on:1.58
           org.bouncycastle:bcprov-jdk15on:1.58
    org.bouncycastle:bcprov-jdk15on:1.69

In order to fix this issue I had to make the following change in my pom.xml:

<dependency>
    <groupId>net.serenity-bdd</groupId>
    <artifactId>serenity-browsermob-plugin</artifactId>
    <version>${serenity.version}</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.69</version>
    <scope>test</scope>
</dependency>
@wakaleo
Copy link
Member

wakaleo commented Aug 19, 2023

Can you propose a PR?

@wakaleo
Copy link
Member

wakaleo commented Aug 20, 2023

I would recommend asking the browsermob-core maintainers to upgrade their library dependencies. Putting dependency exclusions in library dependencies such as Serenity is unreliable, as there is no guarantee Maven will prioritise it or not override the dependency with the old one from somewhere else.

@StevenKolamkuzhiyil
Copy link
Author

In that case i would recommend removing the exclusion rule for org.bouncycastle:bcprov-jdk15on in the serenity-browsermob-plugin.
Should i create a PR for this?

@wakaleo wakaleo removed the wontfix label Aug 22, 2023
@wakaleo
Copy link
Member

wakaleo commented Aug 22, 2023

My bad, fixed in 4.0.0-beta-3

@wakaleo wakaleo closed this as completed Aug 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants