On Wednesday 29 June 2016 12:45:40 Chris Richardson wrote: > 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.
yes, NSS does support only named curves, not curves in arbitrary format btw: you may want to consider using a smaller curve (like the P-384) - the P-521 is not supported by Windows or Chrome -- Regards, Hubert Kario Senior Quality Engineer, QE BaseOS Security team Web: www.cz.redhat.com Red Hat Czech s.r.o., Purkyňova 99/71, 612 45, Brno, Czech Republic
signature.asc
Description: This is a digitally signed message part.
-- dev-tech-crypto mailing list dev-tech-crypto@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-crypto