Openssl提供了强大证书功能,生成密钥对、证书,颁发证书、生成crl、验证证书、销毁证书等。本文将j介绍如何利用openssl的命令分析RSA私钥文件格式,同时也将简单介绍几种常见的私钥文件格式。
命令执行后输出私钥文件 privatekey.pem,默认输出为 PEM格式,密钥长度为1024,接下来使用文本工具直接打开该文件,可以看到如下内容:
私钥经过PEM编码后在文件头尾都添加了标签,用以说明当前的文件格式。从标签内容也可以看出私钥是加密的,因为有“ ENCRYPTED”。中间的私钥内容是经过BASE64编码的,这样方便私钥的传递,例如在网络上传输,数据复制粘贴。
PKCS#8 私钥非加密格式
1 生成私钥文件
openssl有多种方法生成私钥:
- genrsa生成RSA密钥。
- req在生成req证书请求时同时产生密钥。
- genpkey除了可以生成RSA密钥外,还可以生成DSA、DH密钥。
这里我使用genpkey命令生成RSA私钥文件,选择DES-EDE3-CBC算法进行加密,口令是1234:
- openssl genpkey -algorithm RSA -out privatekey.pem -pass pass:1234 -des-ede3-cbc
命令执行后输出私钥文件 privatekey.pem,默认输出为 PEM格式,密钥长度为1024,接下来使用文本工具直接打开该文件,可以看到如下内容:
- -----BEGINENCRYPTED PRIVATE KEY-----
- MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIhrQ3ApYYe1ACAggA
- MBQGCCqGSIb3DQMHBAgyM5zYLuXOdQSCAoAFqnCRqkpoHJTY0BpLeekzjsuzdTOq
- DkgxJMi4WRt1rZNyHqarbhHCZGC9Lug/xbLW5e2ZtjYVJ+ljmFb4lUaAch4nAgoz
- m0J5YyrbFKppiqlk6vkS5hKfpKbWrx5hkQzMt6OsVEQFj2U+EvOI8SVgI6LkjNmh
- 7qokYxv9Inx9joM6agEUY9fXdAu53CyfjpneX95vxUHIn7hHmhxH7MYua619N7x+
- JVA65b3Kj45aH3cnY/kMAQ78EN9aLpqYXzn6j9GRdUd2JMuP0IrYlREw3/z8Qn68
- CwGXzGtkYnlt0xHdOG/tnmKWqBg1cY9uVx6g6JT1BUabqwxVODaMqaSsFr4o3xJo
- 3TTh8TswK0V/+3JLkXtasI7V8cRj2dksccGApujmB5eymU3XXTlX3iXs481I4kmz
- JOZHbqfGOpyzW6WqhMO+LebIkyIGMlCGRiJ3PNSQI9w6bfZ9FoqC6OfFKY1OEmBN
- 6ALtPc+cYXeO5Msx9mbakIYRbcjlVmelPsLyvAceW/09OG909turflvYaGnM+SKd
- KzWn2gFr3YwF57WZlX2jifYUUnjHVMZW7s/k6hgOxcEnvBOg4Ug/cKdNPUEB7tJx
- nvsR+odHypyjgyphLEP8UmEiz3/hnPV8lhLDAPV7fKaK+zDglKqQYF3KBLh55q6h
- PPe1HqahifK9EKqWOl7m1HhFPIZTex4clLy98rB3gyXnL0qx4+A7WD6uLJbU285j
- IWMNq3f1c80ZPrpbhT6hd6Z9zUwfYT6gTO9gIIe4d5KVmfjNaFwSls5zaI6x7AJp
- d/Xl/m1u469+J0rWyeY3D4wtahvZrKMXRrILtJ5OgkWPak2FTyMu/Hs/
- -----ENDENCRYPTED PRIVATE KEY-----
私钥经过PEM编码后在文件头尾都添加了标签,用以说明当前的文件格式。从标签内容也可以看出私钥是加密的,因为有“ ENCRYPTED”。中间的私钥内容是经过BASE64编码的,这样方便私钥的传递,例如在网络上传输,数据复制粘贴。
例子只是PEM文件格式的其中一种,以下是平时可能会碰到的PEM私钥格式:
PKCS#8 私钥加密格式
- -----BEGIN ENCRYPTED PRIVATE KEY-----
- BASE64私钥内容
- -----ENDENCRYPTED PRIVATE KEY-----
PKCS#8 私钥非加密格式
- -----BEGIN PRIVATE KEY-----
- BASE64私钥内容
- -----END PRIVATEKEY-----
Openssl ASN格式
- -----BEGIN RSA PRIVATE KEY-----
- Proc-Type: 4,ENCRYPTED
- DEK-Info:DES-EDE3-CBC,4D5D1AF13367D726
- BASE64私钥内容
- -----END RSA PRIVATE KEY-----
除了以上几种,还有微软的PVK格式;以及DER编码格式,就是在使用PEM编码前的数据,由于没有密码保护,平时很少直接使用。
Openssl ASN格式在加密私钥数据时只能用MD5算法生成key,而且只迭代计算了1次。
所以从1.0.0开始Openssl把PKCS#8格式作为默认格式,可以为私钥文件提供更好的安全性和扩展性。
我们这里就针对PKCS#8格式的私钥进行讨论。 如果大家想要研究其他格式,可以使用以下命令:
genrsa 生成ASN格式
rsa 生成或转换为PVK格式
- openssl rsa -in privatekey.pem -out privatekey.pvk -outform PVK
2 分析私钥文件
使用asn1parse命令读取私钥ASN.1结构,其中–i表示输出使用缩进格式。
openssl asn1parse -i -in privatekey.pem
- 0:d<