Chinaunix首页 | 论坛 | 博客
  • 博客访问: 689699
  • 博文数量: 64
  • 博客积分: 1470
  • 博客等级: 上尉
  • 技术积分: 2133
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-18 12:08
个人简介

文章分类

全部博文(64)

文章存档

2013年(16)

2011年(4)

2010年(14)

2009年(30)

我的朋友

分类: 网络与安全

2013-09-27 18:05:39

原文地址:openssl制作证书 作者:cdlda

本文简要介绍了使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程,包括了RSA算法和DSA算法。
需在openssl目录下,手动生成demoCA\newcerts文件夹,而且在demoCA下手动生成两个文件,index.txtserial文件,index.txt文件为空,serial文件下填01

1. 首先建立CA密钥:
openssl genrsa -des3 -out ca.key 1024 (创建密钥)
chmod 400 ca.key (修改权限为仅root能访问)
openssl rsa -noout -text -in ca.key (查看创建的证书)

2. 利用CA密钥自签署CA证书:
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
chmod 400 ca.crt (修改权限为仅root能访问)
openssl x509 -noout -text -in ca.crt (查看创建的证书)

3. 创建服务器证书签署申请:
openssl genrsa -des3 -out client.key 1024
chmod 400 server.key (修改权限为仅root能访问)
openssl rsa -noout -text -in client.key (查看创建的证书)

4. 利用证书签署申请生成请求:
openssl req -new -key client.key -out client.csr
openssl req -noout -text -in client.csr (查看创建的请求)

5.进行证书签署:
这时候需要先设置一下openssl的配置文件。
modify /usr/share/ssl/openssl.cnf并根据这个配置文件创建相应的目录和文件。
在创建了serial文件之后,还需要添加当前的八进制的serial number,如:01
然后执行:
openssl ca -keyfile ca.key -cert ca.crt -in client.csr -out client.pem

6.证书撤销:
openssl ca -keyfile ca.key -cert ca.crt -revoke client.pem
这时数据库被更新证书被标记上撤销的标志,需要生成新的证书撤销列表:
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl/test.crl
查看证书撤销列表:
openssl crl -noout -text -in crl/test.crl
证书撤销列表文件要在WEB站点上可以使用,必须将crldays或crlhours和crlexts加到证书中:
openssl ca -gencrl -config /etc/openssl.cnf -crldays 7 -crlexts crl_ext -out crl/sopac-ca.crl


如果想使用DSA算法而不是RSA算法,那么:
1.先生成dsa参数
openssl dsaparam -rand -genkey -out dsa.pem 1024
查看生成的DSA参数
openssl dsaparam -noout -text -in dsa.pem

2.根据生成的DSA参数来生成DSA密钥
openssl gendsa -des3 -out ca.key dsa.pem
查看DSA密钥
openssl dsa -noout -text -in ca.key

下面的步骤同RSA部分



前面生成私钥时都使用了des3来加密,其实也可以指定-des用des加密,当然强度就没有des3高了。虽然man里面说还可以通过指定-idea用idea算法来加密,可是事实上由于米国专利的问题,默认是不支持的。

创建client.crt文件时候报错,如下

Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
unable to write 'random state'

下面是收集到的方法:

1. 修改demoCA index.txt.attr

unique_subject = yes

改成

unique_subject = no

2. 删除index.txt,然后重新创建一个同名空白文件

rm index.txt    

touch index.txt 

3.  common name设置成不同的 (这个是不是需要重建certificate request?)

最后删除了index.txt然后重建,解决问题。


阅读(10153) | 评论(0) | 转发(0) |
0

上一篇:在c++builder 6.0中添加openssl的支持

下一篇:没有了

给主人留下些什么吧!~~