tree 47268a9a7e5ec989cd2c3934146f6b3f50246ef9
parent a445728a2ab1f6b6805c6904126fb039d71d8faf
author Jia Zhai <zhaijia@apache.org> 1625469743 +0800
committer GitHub <noreply@github.com> 1625469743 +0800
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJg4rMvCRBK7hj4Ov3rIwAAaE8IAAmgVUbCpUoNhSE6fhJIMkA7
 trUwFi0kfHjy1mwxqfoOLJsw346o6tiB6zZPH4DTCNaFc9K4V6kusrmcQ92TVJCg
 LqBZwSMk1VIY15JPupmq9CyrotLCIWYmHX8iSrJys1brKitNvX9pKRalepJxBKSG
 slnkVFP9ZzEOBKCrTh5R6G+otROWQYY5gnyxtZnKGHanSBnh9UvefhkyOUqFyr5e
 F8ZCbhyNWMSY9HtUjeLMur7gfaAiuSqfrv7Tb3PaXVjiQ4mS+rR+TLqgP+W7CoM0
 zxBoZMRitavAuIBPR1ksbfcNKolpaxlxRfcZym4+06+ChkBJ3TBCD0Aj4rLE8HQ=
 =/gHC
 -----END PGP SIGNATURE-----
 

Fix Bouncy Castle fips incompatible issue (#2740)




### Motivation

More details are provided in [Pulsar # 10937](https://github.com/apache/pulsar/issues/10937).

In #2631, the default BouncyCastle was changed from non-fips into fips version. But the default version of BouncyCastle in Pulsar is the [non-fips](https://github.com/apache/pulsar/blob/v2.8.0/pulsar-client/pom.xml#L56) one(aimed to make it compatible with the old version of Pulsar). 

Bouncy Castle provides both FIPS and non-FIPS versions, but in a JVM, it can not include both of the 2 versions(non-Fips and Fips), and we have to exclude the current version before including the other. This makes the backward compatible a little hard, and that's why Pulsar has to involve an individual module for [Bouncy Castle](https://pulsar.apache.org/docs/en/security-bouncy-castle).

And if we want to start BookKeeper with TLS enabled through Pulsar's binary, it will meet the following error:
```
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jcajce/provider/BouncyCastleFipsProvider
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:315)
	at org.apache.bookkeeper.common.util.ReflectionUtils.forName(ReflectionUtils.java:49)
	at org.apache.bookkeeper.tls.SecurityProviderFactoryFactory.getSecurityProviderFactory(SecurityProviderFactoryFactory.java:39)
	at org.apache.bookkeeper.proto.BookieServer.<init>(BookieServer.java:129)
	at org.apache.bookkeeper.server.service.BookieService.<init>(BookieService.java:52)
	at org.apache.bookkeeper.server.Main.buildBookieServer(Main.java:304)
	at org.apache.bookkeeper.server.Main.doMain(Main.java:226)
	at org.apache.bookkeeper.server.Main.main(Main.java:208)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	... 9 more
```

This fix is to use the reflection to get the loaded bc version to avoid the hard-coded bc version.

### Changes

Use the reflection to get the loaded bc version to avoid the hard-coded bc version
Add backward compatible test for bc-non-fips version