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

Attachment: 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

Reply via email to