On 29 June 2016 at 12:02, Hubert Kario <hka...@redhat.com> wrote: > On Tuesday 28 June 2016 02:59:18 chrisr wrote: > > Hi, > > > > I'm trying to import an EC key and cert generated with openssl into an > NSS > > DB but am getting this error from pk12util: > > pk12util: PKCS12 decode import bags failed: > > SEC_ERROR_PKCS12_UNABLE_TO_IMPORT_KEY: Unable to import. Error > attempting > > to import private key. > > > > I've tested this on Gentoo x86 with nss versions 3.23(portage), > > 3.24(portage) and 3.25 (from source) with the same result. Changing the > key > > type to RSA works so I wonder if this might be bug in the EC key > handling? > > > > Steps to reproduce: > > # Create an empty NSS db > > mkdir nss > > openssl rand -base64 -out nss/pw 21 > > certutil -d nss -f nss/pw -N > > # Generate an EC key/cert > > openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp521r1 -keyout > > key.pem -out cert.pem -days 3650 -nodes -subj "/CN=Test CA" > > # Export to pkcs12 format > > openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12 -name > Test > > # Import to nss db > > pk12util -i cert.p12 -d nss -k nss/pw > > # pk12util reports error > > Using nss 3.23.0 and openssl 1.0.1 on Fedora with slightly different > commands, > I can't reproduce it: > > mkdir nssdb > certutil -N --empty-password -d sql:nssdb/ > openssl ecparam -out secp521r1.pem -name secp521r1 > openssl req -x509 -newkey ec:secp521r1.pem -keyout localhost.key -out > localhost.crt -subj /CN=localhost -nodes -batch > openssl pkcs12 -export -passout pass: -out localhost.p12 -inkey > localhost.key -in localhost.crt > pk12util -i localhost.p12 -d sql:nssdb/ -W '' > certutil -L -d sql:nssdb/ -n localhost -a | openssl x509 -noout -text > > so it doesn't look to me like a problem with EC keys specifically > > which version of OpenSSL are you using? >
I'm using openssl-1.0.2g. Your script also works on my environment so I'll switch to that method. It looks like there is a significant difference in the keys produced by openssl in the two cases - your script produces a key that looks like this: $ openssl pkey -in localhost.key -text -noout Private-Key: (521 bit) priv: <hex> pub: <hex> ASN1 OID: secp521r1 NIST CURVE: P-521 while mine produces this: $ openssl pkey -in key.pem -text -noout Private-Key: (521 bit) priv: <hex> pub: <hex> Field Type: prime-field Prime: <hex> A: <hex> B: <hex> Generator (uncompressed): <hex> Order: <hex> Cofactor: 1 (0x1) Seed: <hex> so I assume (perhaps stating the obvious) that the problem is that in the latter case the key is a definition of the finite field in parametric form rather than using the standard curve name and that this is not supported by nss. Many thanks! *Chris Richardson*, System Architect c...@fourc.eu *FourC AS, Vestre Rosten 81, Trekanten, NO-7075 Tiller, Norwaywww.fourc.eu <http://www.fourc.eu/>* -- dev-tech-crypto mailing list dev-tech-crypto@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-crypto