By default, JSS removes the Sun provider. This is legacy behavior. You
can prevent this by setting
CryptoManager.InitializationValues.removeSunProvider = false when you
intialize JSS.
Steven T. Hatton wrote:
> I'm using j2se1.4-b3, though I don't believe that's the problem. When I
> get an org.mozilla.jss.CryptoManager instance and then try to get a
> java.security.cert.CertificateFactory, I get the following:
> /************************************************************/
> $java CertFactoryTest f
> java.security.cert.CertificateException: X.509 not found
> at
> java.security.cert.CertificateFactory.getInstance(CertificateFactory.java:194)
>
> at CertFactoryTest.initCertFactory(CertFactoryTest.java:8)
> at CertFactoryTest.main(CertFactoryTest.java:34)
> Caused by: java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:42)
>
> at
>
>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:28)
>
> at java.lang.reflect.Method.invoke(Method.java:327)
> at
> java.security.cert.CertificateFactory.getInstance(CertificateFactory.java:180)
>
> ... 2 more
> Caused by: java.security.NoSuchAlgorithmException: X.509
> CertificateFactory not available
> at java.security.Security.getEngineClassName(Security.java:573)
> at java.security.Security.getEngineClassName(Security.java:584)
> at java.security.Security.getImpl(Security.java:1033)
> ... 7 more
> /************************************************************/
>
> However, when I reverse the order of the creation, I don't seem to have
> a conflict. I have not tested to verify that all the functionality of
> these successfully created classes is available. I have only
> established that no exceptions are thrown when they are created. The
> code below demonstrates the situation. Running CertFactoryTest with no
> arguments creates the CertificateFactory before the CryptoManager. By
> giving an argument on the commandline the call order is reversed.
>
> The obvious question is: What is going on here?
>
> /* CertFactoryTest.java */
> public class CertFactoryTest {
>
> public CertFactoryTest() {
> } // constructor
>
> public void initCertFactory() {
> try {
> java.security.cert.CertificateFactory cf
> = java.security.cert.CertificateFactory.getInstance("X.509");
> } catch (Exception e) {
> e.printStackTrace();
> } // catch
> } // initCertFactory
>
> public void initCryptoMan() {
> org.mozilla.jss.CryptoManager.InitializationValues vals
> = new org.mozilla.jss.CryptoManager.InitializationValues("ns-keys");
> try {
> org.mozilla.jss.CryptoManager.initialize(vals);
> org.mozilla.jss.CryptoManager cryptoMan
> = org.mozilla.jss.CryptoManager.getInstance();
> } catch(Exception e) {
> e.printStackTrace();
> } // catch
> } // initCryptoMan
>
> public static void main(String[] args) {
> CertFactoryTest cft = new CertFactoryTest();
> if (args.length == 0 ) {
> cft.initCertFactory();
> cft.initCryptoMan();
> } else {
> cft.initCryptoMan();
> cft.initCertFactory();
> } // else
> } // main
>
> } // certFactoryTest
>