From 57a436c82c764fa37e204682be23980d60417614 Mon Sep 17 00:00:00 2001 From: Robert Hafner Date: Wed, 31 Jul 2024 16:57:23 -0400 Subject: [PATCH] feat: add support for other security providers#3590 Dynamically load security providers using the Java Service Provider Interface. This allows the user to pick the provider based upon the dependencies it has on its classpath. --- .../java/io/kubernetes/client/util/SSLUtils.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/util/src/main/java/io/kubernetes/client/util/SSLUtils.java b/util/src/main/java/io/kubernetes/client/util/SSLUtils.java index 4c529e7de5..98db0c2231 100644 --- a/util/src/main/java/io/kubernetes/client/util/SSLUtils.java +++ b/util/src/main/java/io/kubernetes/client/util/SSLUtils.java @@ -24,6 +24,7 @@ import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; +import java.security.Provider; import java.security.Security; import java.security.UnrecoverableKeyException; import java.security.cert.Certificate; @@ -32,6 +33,7 @@ import java.security.cert.X509Certificate; import java.security.spec.InvalidKeySpecException; import java.util.Collection; +import java.util.ServiceLoader; import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; @@ -40,10 +42,18 @@ import org.bouncycastle.openssl.jcajce.JcaMiscPEMGenerator; import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; import org.bouncycastle.util.io.pem.PemWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class SSLUtils { + private static final Logger log = LoggerFactory.getLogger(SSLUtils.class); + static { - Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); + ServiceLoader services = ServiceLoader.load(java.security.Provider.class); + for (Provider service : services) { + log.debug("Found security provider: " + service.getName()); + Security.addProvider(service); + } } public static boolean isNotNullOrEmpty(String val) {