diff --git a/cds-feature-auditlog-ng/src/main/java/com/sap/cds/feature/auditlog/ng/CertificateHttpClientConfig.java b/cds-feature-auditlog-ng/src/main/java/com/sap/cds/feature/auditlog/ng/CertificateHttpClientConfig.java index c45e656..c73a5d9 100644 --- a/cds-feature-auditlog-ng/src/main/java/com/sap/cds/feature/auditlog/ng/CertificateHttpClientConfig.java +++ b/cds-feature-auditlog-ng/src/main/java/com/sap/cds/feature/auditlog/ng/CertificateHttpClientConfig.java @@ -24,7 +24,7 @@ import org.apache.http.impl.client.HttpClients; import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import org.bouncycastle.cert.X509CertificateHolder; -import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider; import org.bouncycastle.openssl.PEMParser; import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder; import org.bouncycastle.operator.InputDecryptorProvider; @@ -52,9 +52,9 @@ public class CertificateHttpClientConfig { private static final Logger logger = LoggerFactory.getLogger(CertificateHttpClientConfig.class); static { - // Register BouncyCastle provider if not already present - if (Security.getProvider("BC") == null) { - Security.addProvider(new BouncyCastleProvider()); + // Register BouncyCastle FIPS provider if not already present + if (Security.getProvider("BCFIPS") == null) { + Security.addProvider(new BouncyCastleFipsProvider()); } } @@ -170,11 +170,11 @@ public CertificateHttpClientConfig build() { private CloseableHttpClient createHttpClient() { try { char[] effectivePassphrase = (keyPassphrase != null) ? keyPassphrase.toCharArray() : new char[0]; - logger.info("Creating HttpClient with certificate authentication and {} retries", maxRetries); + logger.info("Creating HttpClient with certificate authentication and {} retries (BCFIPS)", maxRetries); X509Certificate[] certChain = parseCertificateChain(certPem); PrivateKey privateKey = parsePrivateKey(keyPem, effectivePassphrase); - KeyStore keyStore = KeyStore.getInstance("PKCS12"); + KeyStore keyStore = KeyStore.getInstance("PKCS12", "BCFIPS"); keyStore.load(null, null); keyStore.setKeyEntry("client", privateKey, new char[0], certChain); @@ -237,7 +237,7 @@ private static PrivateKey parsePrivateKey(String keyPem, char[] passphrase) thro return KeyFactory.getInstance("RSA").generatePrivate(keySpec); } else if (object instanceof PKCS8EncryptedPrivateKeyInfo encInfo) { try { - InputDecryptorProvider decryptorProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder().build(effectivePassphrase); + InputDecryptorProvider decryptorProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder().setProvider("BCFIPS").build(effectivePassphrase); PrivateKeyInfo keyInfo = encInfo.decryptPrivateKeyInfo(decryptorProvider); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyInfo.getEncoded()); return KeyFactory.getInstance("RSA").generatePrivate(keySpec); diff --git a/pom.xml b/pom.xml index 5259140..7f55bb3 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,10 @@ 5.18.0 5.25.0 5.21.0 - 1.83 + 2.1.3 + 2.1.8 + 2.1.20 + 2.1.5 com.sap.cds @@ -86,14 +89,26 @@ org.bouncycastle - bcprov-jdk18on - ${bcpkix-jdk18on.version} + bc-fips + ${bc-fips.version} org.bouncycastle - bcpkix-jdk18on - ${bcpkix-jdk18on.version} + bcpkix-fips + ${bcpkix-fips.version} + + + + org.bouncycastle + bctls-fips + ${bctls-fips.version} + + + + org.bouncycastle + bcutil-fips + ${bcutil-fips.version}