[openssl-users] Differences in openssl 0.9.8 and 1.0.1x for private pem key file

Dave Thompson dthompson at prinpay.com
Tue Dec 30 22:19:27 UTC 2014


> From: openssl-users On Behalf Of Jaya Nageswar
> Sent: Tuesday, December 30, 2014 02:36

> ... the output [is] different between openssl 0.9.8 and 1.0.1x versions as the following methods 
> are being used in the code flow for the method PEM_write_bio_PrivateKey.
> 1.0.1x - PEM_write_bio_PKCS8PrivateKey
> 0.9.8 - PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey,...)

Yes. To be complete, it's 0.9.8anything versus 1.0.0anything OR 1.0.1anything.

> 1. As I mentioned earlier, We have a sample application where we try to read 
> a  sample pem key file, create an EVP_PKEY indirectly using PEM_read_bio_PrivateKey 
> and try to create pem key files encrypted using different ciphers like (RC2, RC4    etc.) 
> using the method PEM_write_bio_PrivateKey. I am getting a different output in 1.0.1x 
> while using the cipher RC2 by using the method PEM_write_bio_PrivateKey.That is 
> understandable as we use PKCS8 in 1.0.1x. However if I try to use the cipher RC4 
> for encyrption,PEM_write_bio_PKCS8PrivateKey is failing.Is there a known issue or a bug for RC4.  

I don't see anything in RT (the bug tracker) but yes privatekey encryption doesn't work 
for RC4, apparently because it's a stream cipher with no IV. The symptoms vary:

- writing PKCS8 encrypted gives an error, in either DER or PEM (PKCS8 is encrypted 
in the DER, the PEM just base64's it). In 1.0.0+ PEM_write_PrivateKey maps to 
PEM_write_PKCS8PrivateKey and therefore gets this.

- writing traditional RSA/etc encrypted PEM (which encrypts at the PEM level) 
writes a file and returns success, but that file can't be decrypted because it has no IV.
In 0.9.8 PEM_write_PrivateKey maps to PEM_write_{RSA/etc}PrivateKey and gets this.

- for completeness remember there is no traditional encrypted DER format.

> 2. Also Can I use the method PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey,...) 
> in 1.0.1x instead of the method PEM_write_bio_PrivateKey if I want to have the same output similar to 0.9.8.

It looks like you can, but it's not documented that I can see and looks a bit fragile.

The long-documented way that works on all versions (so far!) is to call the correct 
per-algorithm routine PEM_write_{RSA,DSA,EC}PrivateKey .




More information about the openssl-users mailing list