From: Blum, J. <jon...@or...> - 2017-02-03 14:21:58
|
Hello all -- I'm able to generate RSA keys through the SignServer CLI, but I get "Cannot load SunEC provider" errors if I try to generate an ECDSA key. What should I check for in my setup? An example: [jon@localhost lib]$ bin/signserver generatekey CryptoTokenP11 -keyalg ECDSA -keyspec prime192v3 -alias 2017_06 (...) Caused by: java.lang.RuntimeException: Cannot load SunEC provider at sun.security.pkcs11.P11ECKeyFactory.getSunECProvider(P11ECKeyFactory.java:55) at sun.security.pkcs11.P11ECKeyFactory.getECParameterSpec(P11ECKeyFactory.java:71) at sun.security.pkcs11.P11KeyPairGenerator.initialize(P11KeyPairGenerator.java:146) at sun.security.pkcs11.P11KeyPairGenerator.<init>(P11KeyPairGenerator.java:133) at sun.security.pkcs11.SunPKCS11$P11Service.newInstance0(SunPKCS11.java:1014) at sun.security.pkcs11.SunPKCS11$P11Service.newInstance(SunPKCS11.java:991) at sun.security.jca.GetInstance.getInstance(GetInstance.java:236) at sun.security.jca.GetInstance.getInstance(GetInstance.java:206) at java.security.KeyPairGenerator.getInstance(KeyPairGenerator.java:279) at org.cesecore.keys.util.KeyStoreTools.generateEC(KeyStoreTools.java:175) at org.cesecore.keys.util.KeyStoreTools.generateKeyPair(KeyStoreTools.java:320) at org.cesecore.keys.token.PKCS11CryptoToken.generateKeyPair(PKCS11CryptoToken.java:212) at org.signserver.server.cryptotokens.PKCS11CryptoToken.generateKey(PKCS11CryptoToken.java:515) at org.signserver.server.cryptotokens.PKCS11CryptoToken.generateKey(PKCS11CryptoToken.java:527) at org.signserver.server.BaseProcessable.generateKey(BaseProcessable.java:1059) For the record, this is SignServer 3.7.0, under JDK 8, running on Wildfly 10, talking to a Luna SA HSM. The system's been functioning fine for months with RSA keys. I've tried generating ECDSA with a variety of different keyspecs. I've checked that sunec.jar exists on my system, in /usr/java/latest/jre/lib/ext/sunec.jar; is it possible that SignServer could be running somehow without this in its path? Do I need to copy it locally into my Wildfly installation? I've also confirmed that SunEC is in the provider list in java.security: security.provider.1=sun.security.provider.Sun security.provider.2=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/luna.cfg security.provider.3=sun.security.rsa.SunRsaSign security.provider.4=sun.security.ec.SunEC (etc) Whatever the problem is, it appears to be P11CryptoToken-specific. If I try running with a P12CryptoToken, I get a different error, which indicates that it's apparently found the crypto provider it needs but not the named curve I'm looking for: [jon@localhost signserver]$ bin/signserver generatekey CryptoTokenP12 -keyalg ECDSA -keyspec P-224 -alias 2017_06 (...) Caused by: java.security.cert.CertificateParsingException: java.io.IOException: Unknown named curve: 1.3.132.0.33 at sun.security.x509.X509CertInfo.<init>(X509CertInfo.java:169) at sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1804) at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:195) at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:102) at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339) at org.bouncycastle.cert.jcajce.JcaX509CertificateConverter.getCertificate(Unknown Source) at org.signserver.server.cryptotokens.CryptoTokenHelper.getSelfCertificate(CryptoTokenHelper.java:499) at org.signserver.server.cryptotokens.CryptoTokenHelper.createDummyCertificate(CryptoTokenHelper.java:471) at org.signserver.server.cryptotokens.KeystoreCryptoToken.generateKey(KeystoreCryptoToken.java:475) at org.signserver.server.BaseProcessable.generateKey(BaseProcessable.java:1059) But that's a secondary issue; my actual solution has to use the CryptoTokenP11. Any suggestions welcome! Cheers, Jon Blum |