当前位置:文档之家› OpenSSL 命令常用证书操作

OpenSSL 命令常用证书操作

在OpenSSL开发包中,包含一个实用工具:openssl,比如我用MinGW GCC 编译OpenSSL 0.9.8k 后,openssl 就保存在out目录下。

openssl 工具是完成密钥、证书操作和其它SSL 事务的入口环境,直接运行不带参数的openssl 命令后,可以得到一个shell 环境,在其中可以以交互的方式完成SSL 相关的安全事务。

不过有时,如果用一个带参数选项的openssl 命令完成操作,会更方便。

下面是我使用openssl 做证书操作时,记录的常用命令用法。

1.生成密钥
生成RSA密钥,保存在file.key中,命令如下:
上面命令的含义是:产生RSA密钥,包括:私钥和公钥两部分,然后使用DES3算法,用用户输入的密码(passphrase)加密该密钥数据,保存在file.key中。

file.key默认以BASE64方式编码密钥数据,file.key的格式称为:PEM (Privacy Enhanced Mail)格式,在RFC 1421到RFC 1424中定义,PEM是早期用来进行安全电子邮件传输的标准,但现在广泛用在证书、证书请求、PKCS#7对象的存储上,所以证书文件也经常以.pem为扩展名。

2.不加密的密钥
如果在生成密钥时,使用了-des3等加密选项,则会生成被用户密码保护的加密密钥,以增强密钥数据的保密性(因为密钥文件中包含私钥部分)。

但有时为了方便,需要不加密的明文密钥(这样安全性会降低),比如:使用
Apache的HTTPS服务,每次启动Apache服务时,都需要用户输入保护密钥的密码,感觉麻烦的话,可以使用明文密钥。

明文密钥可以使用不带-des3等加密选项的openssl命令生成,还可以使用以下命令将加密保护的密钥转换成明文密钥,当然转换过程需要用户输入原来的加密保护密码:
3.查看密钥
查看保存在file.key中的RSA密钥的细节,如果此文件是加密保护的,会提示用户输入加密此文件的密码,命令如下:
输出的内容均是RSA密钥数据的数学信息(模数、指数、质数等),从输出的结果中也可知file.key保存的RSA密钥数据包括:私钥和公钥两部分。

该命令也能查看其它工具生成的密钥,比如SSH,只要密钥文件符合openssl支持的格式。

4.生成证书请求
由file.key产生一个证书请求(Certificate Request),保证在file.csr 中,命令如下:
指定时,默认会访问Unix格式的默认路径:/usr/local/ssl/f。

创建证书请求时,会要求用户输入一些身份信息,示例如下:
注意:
∙产生的证书请求文件file.csr,也采用BASE64编码的字符格式。

∙DN(Distinguished Name)为这个证书请求的标识,上面这些输入的内容,即是组成DN的字段(field),其中有些可以留空,比如:额外属性(extra attributes)。

DN的概念也在LDAP中存在,参考:Appendix A - LDAP: DN & RDN,所以通常用LDAP来管理证书。

∙输入点号(.),表示这一字段留空。

CN(Common Name)这项很重要,当创建的证书用于网站时,此项应该为该网站的FQDN,假如以后使用此证书的网站的域名与证书里的不匹配时,浏览器将报错。

5.查看证书请求
显示证书请求file.csr的细节,命令如下:
1 openssl req -noout -text -in file.csr -config /path/to/f
比如,会显示创建证书请求时,用户输入的信息:
Subject: C=CN, ST=Shaanxi, L=Xi'an, O=zy-home, CN=zy-root/emailAddress=zy-root@
6.签发证书:自签
可以使用一个密钥文件.key,对证书请求file.csr进行签名,生成证书file.cer(Certificate)。

如果使用证书请求file.csr自己的密钥文件file.key来签名,称为自签,命令如下:
1 openssl x509 -req -in file.csr -out file.cer -signkey file.key -days 3650
对证书请求的签名,实际使用的是密钥文件.key中的私钥部分数据。

如果.key是加密保护的,则会提示用户输入密码。

7.签发证书:使用CA证书签名
如果使用另一个证书file1.cer及其密钥文件file1.key,对一个证书请求file2.csr进行签名,则使用下面命令:
1 openssl x509 -req -in file2.csr -out file2.cer -signkey file2.key -CA file1.cer -CAkey file1.key -CAcreateserial -days 3650
个包含证书file2.cer序号的文件:file1.srl,注意:这个序号文件的名称,是以签名证书的CA名字命名的。

实际工作中,用来签名的file1.cer和file1.key,通常由一个认证授权者(CA - Certificate Authority)提供,而这个签名过程也在认证授权者内部完成,因为file1.key中包含这个认证授权者自己的私钥部分数据,不能暴露到外部。

CA:Certificate Authority,它的名字翻译过来有很多种:认证授权者,权威机构,认证中心。

CA是以角色和功能来定义的,它的形式可以是个人、
组织、机构、政府等等,但一般大家公信的CA通常是一些大的安全公司、机构、政府部门等,例如:VeriSign、Thawte。

8.查看证书
∙可以使用SUN JRE/JDK中的keytool,来显示证书file.cer的
∙也可以用openssl的命令显示证书file.cer的细节:
9.
将一对PEM格式的证书和其密钥文件,转换成PKCS#12格式的证书文件,PKCS#12称为Personal Information Exchange格式,通常以.p12
需要设置导出密码(Export Password)保护PKCS#12证书文件。

一般浏览器对个人证书的导入/导出都采用PKCS#12格式,在浏览器中导入PKCS#12文件时,会提示输入的密码,即上面设置的导出密码,而原始的PEM密钥文件的保护密码不能在这里用。

相关主题