``` diff --git a/src/main/java/org/jruby/ext/openssl/SecurityHelper.java b/src/main/java/org/jruby/ext/openssl/SecurityHelper.java index 0bc3f8e..236cbba 100644 --- a/src/main/java/org/jruby/ext/openssl/SecurityHelper.java +++ b/src/main/java/org/jruby/ext/openssl/SecurityHelper.java @@ -42,6 +42,7 @@ import java.security.KeyStoreException; import java.security.MessageDigest; import java.security.MessageDigestSpi; import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; import java.security.Provider; import java.security.PublicKey; import java.security.SecureRandom; @@ -266,10 +267,14 @@ public abstract class SecurityHelper { throws CertificateException { final CertificateFactorySpi spi = (CertificateFactorySpi) getImplEngine("CertificateFactory", type); if ( spi == null ) throw new CertificateException(type + " not found"); - return newInstance(CertificateFactory.class, - new Class[]{ CertificateFactorySpi.class, Provider.class, String.class }, - new Object[]{ spi, provider, type } - ); + try { + return CertificateFactory.getInstance(type, provider.getName()); + } catch (NoSuchProviderException nspe) { + return newInstance(CertificateFactory.class, + new Class[]{CertificateFactorySpi.class, Provider.class, String.class}, + new Object[]{spi, provider, type} + ); + } } /** ```