mock-server / mockserver

MockServer enables easy mocking of any system you integrate with via HTTP or HTTPS with clients written in Java, JavaScript and Ruby. MockServer also includes a proxy that introspects all proxied traffic including encrypted SSL traffic and supports Port Forwarding, Web Proxying (i.e. HTTP proxy), HTTPS Tunneling Proxying (using HTTP CONNECT) and SOCKS Proxying (i.e. dynamic port forwarding).
http://mock-server.com
Apache License 2.0
4.52k stars 1.06k forks source link

Support BouncyCastle FIPS library #1769

Open artik00 opened 1 year ago

artik00 commented 1 year ago

Describe the feature request Currently mockserver uses bcprov-jdk18on library, when using a client to communicate with mockserver, which usesbc-fips library , it crashes with :

2023-07-06 22:43:16 java.lang.NoSuchFieldError: blake3_256
2023-07-06 22:43:16     at org.bouncycastle.jcajce.provider.digest.Blake3$Mappings.configure(Unknown Source)
2023-07-06 22:43:16     at org.bouncycastle.jce.provider.BouncyCastleProvider.loadServiceClass(BouncyCastleProvider.java:289)
2023-07-06 22:43:16     at org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(BouncyCastleProvider.java:256)
2023-07-06 22:43:16     at org.bouncycastle.jce.provider.BouncyCastleProvider.setup(BouncyCastleProvider.java:178)
2023-07-06 22:43:16     at org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(BouncyCastleProvider.java:68)
2023-07-06 22:43:16     at org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(BouncyCastleProvider.java:170)
2023-07-06 22:43:16     at java.base/java.security.AccessController.doPrivileged(Native Method)
2023-07-06 22:43:16     at org.bouncycastle.jce.provider.BouncyCastleProvider.<init>(BouncyCastleProvider.java:166)
2023-07-06 22:43:16     at org.mockserver.socket.tls.bouncycastle.BCKeyAndCertificateFactory.<clinit>(BCKeyAndCertificateFactory.java:55)
2023-07-06 22:43:16     at org.mockserver.socket.tls.KeyAndCertificateFactoryFactory.createKeyAndCertificateFactory(KeyAndCertificateFactoryFactory.java:27)
2023-07-06 22:43:16     at org.mockserver.socket.tls.NettySslContextFactory.<init>(NettySslContextFactory.java:79)
2023-07-06 22:43:16     at org.mockserver.client.MockServerClient.getNettyHttpClient(MockServerClient.java:341)
2023-07-06 22:43:16     at org.mockserver.client.MockServerClient.sendRequest(MockServerClient.java:392)
2023-07-06 22:43:16     at org.mockserver.client.MockServerClient.sendRequest(MockServerClient.java:428)
2023-07-06 22:43:16     at org.mockserver.client.MockServerClient.hasStarted(MockServerClient.java:583)
2023-07-06 22:43:16     at org.mockserver.client.MockServerClient.hasStarted(MockServerClient.java:575)

What you are trying to do Currently only using bcprov-jdk* libraries work

The solution you'd like An option which library to use wether bc fips certified or regular.

Describe alternatives you've considered No alternative as of now.

Similar issue that was reported.

Thank you!

krm1312 commented 9 months ago

If you don't need to support TLS/SSL in your tests you can get away with:

static {
        KeyAndCertificateFactoryFactory.setCustomKeyAndCertificateFactorySupplier((logger, isServerInstance, configuration) -> null);
}