openssl使用小记

2010-05-06 14:07

最近使用openssl制作ssl服务器证书,首先生成CA根证书(导入浏览器用),然后生成用户证书,如 commonName = *.humou.net ,然后用CA根证书为用户证书签名,整个过程,很简单,只是在subjectAltName(使用者备用名称)处搞得头晕晕的。
也就是一个ssl证书,供多个域及子域使用。
Google出来的全是英文,因为是英盲,所以没搞定,期间有使用多个commonName来测试,但是仅IE浏览器支持...
记录一下大致步骤:
一:生成Root CA
生成ca.key文件:
>openssl genrsa -des3 -out ca.key 2048
(可选)去除key文件密码:
>openssl rsa -in ca.key -out ca.key
生成ca.crt:
>openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
####然后系统提示输入国家代号、省份名称、城市名称、公司名称、部门名称、根证书所有者及Email地址,这样Root CA就制作完成,你就可以做证书颁发机构了###
二:生成用户证书
 生成user.key
>openssl genrsa -des3 -out user.key 2048
生成user.csr
>openssl req -new -key user.key -out user.csr
###注意如果是服务器证书,commonName时输入域名,如*.humou.net,支持*通配符,邮箱可填可不填,如果生成个人证书,如用来加密签名电子邮件,commonName输入姓名,emailAddress是电子邮件地址###
暂时未搞定的情况:如https://humou.nethttps://www.humou.net使用同一个ssl证书。
如果仅使用IE的情况,可以修改openssl.cfg文件,找到如下:
commonName   = Common Name (eg, YOUR name)
commonName_max   = 64
修改为:
0.commonName   = Common Name1 (eg, YOUR name)
0.commonName_max   = 64
1.commonName   = Common Name2 (eg, YOUR name)
1.commonName_max   = 64
2.commonName   = Common Name3 (eg, YOUR name)
2.commonName_max   = 64
.....
等等,然后生成user.csr时就可输入多个commonName(CN)了。
以上修上后生成的证书只适用于IE,Firefox等无效,Firefox只识别为最后一个CN.
三:使用Root CA为user签名
使用到的文件:user.csr, ca.crt,ca.key
>openssl ca -in user.csr -out user.crt -cert ca.crt -keyfile ca.key
如果Root没有密码,以上命令后输入两次"y",生成user.crt成功。
如果报错,请确定运行openssl命令的目录下是否有如下文件夹:
---demoCA(一级)
       -- newcerts(二级)
       -- private(二级)
及demoCA文件夹下有如下文件:
demoCA -- index.txt
                   -- serial
index.txt为空白文件,serial文件中输入数字如:123.
#############################################
三个步骤操作完成,附上Root CA crt格式转换为der格式命令:
>openssl x509 -in ca.crt -outform DER -out ca.der
der格式适用于移动设备导入根证书,如诺基亚智能手机.
最后给大家送上两个网址:
个人免费电子邮件证书: http://www.comodo.com/
免费的web服务器 ssl证书: https://www.startssl.net/
以上证书都是己内置在浏览器等客户端中,是受信任的。

0 条回复

说两句