在linux下openssl生成证书和自签证书

第一步 了解配置文件

1.1.1 linuxOpenSSL下的CA机制的配置

OpenSSL下的CA机制配置主要依靠根目录下的openssl.cnf文件。他规定了CA生成,签发和吊销证书的主要规则。并且opensslca指令必须搭配正确的openssl.cnf文件配置才能够正确运行(ca命令并不一定需要完全依赖于openssl.cnf文件中的配置才能正常运行,其实在ca命令中,存在另外一种机制,可以在命令行中指定相应的配置信息,但是这种方法使用起来太过繁琐,不推荐使用)。所以,我们首先必须给OPENSSL CA指定一个正确的配置文件。以下列出文件中几处比较重要的字段信息加以说明。

[ ca ]

default_ca       = CA_default  

这一部分十分简单,只包含了一个键值default_ca,他的值是一个保存了CA默认配置的段的名字,这里是CA_default。这意味着OpenSSL在生成证书时将要到CA_default字段来寻找相应的配置信息。

openssl命令允许在一个配置文件里面,存在有多个CA的配置。

[ CA_default ]

这个段里包含了CA的配置信息,其中主要包括了指定CA的根目录结构,并且告诉openssl去那里去能够找到他签发证书时需要的文件,和将要生成的文件的存放位置。

[ CA_default ]

dir          = /etc/ssl/demoCA # 指定了CA的根目录

certs        = $dir/certs            # 已经签发的证书的存储目录

crl_dir      = $dir/crl            # 存储证书吊销列表的目录

database     = $dir/index.txt      # 数据库的索引文件,用来存放签发证书的信息。

#unique_subject  = no               #设置为’no’表示允许同时创建多个相同主题的证书。

new_certs_dir = $dir/newcerts        # 设置存放新签发的证书的默认位置

Certificate   = $dir/cacert.pem # 指定CA证书

serial        = $dir/serial          # 指定存放当前序列号的文件

crl           = $dir/crl.pem         # 当前的CRL

private_key   = $dir/private/cakey.pem # CA的私钥

RANDFILE      = $dir/private/.rand   #指明一个用来读写时候产生random key的seed文件。

当我们需要在命令行中使用req命令生成证书请求文件,我们必须为req命令提供必要的信息,在命令行中,提供了与其命名相同的段,来配置其必要的信息。

[ req_distinguished_name ]

req_distinguished_name这个扩展区域的键值是在我们使用req命令生成证书请求文件时希望被填入的信息。

第二步

说说本人的操作环境:无盘工作站(有权限问题使用起来不太方便),操作目录是openssl/bin(没办法改不了环境变量,如果你可以改的话,就不用在这个目录下工作了),为了方便本人把apps下的openssl.cnf也复制到了这个目录下来。文件名都是以本人使用的来说了:

1.首先要生成服务器端的私钥(key文件):
openssl genrsa -des3 -out server.key 1024
运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!
去除key文件口令的命令:
openssl rsa -in server.key -out server.key

2.openssl req -new -key server.key -out server.csr -config openssl.cnf
生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.

3.对客户端也作同样的命令生成key及csr文件:
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr -config openssl.cnf

4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:
Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

现在我们所需的全部文件便生成了.

另:
client使用的文件有:ca.crt,client.crt,client.key
server使用的文件有:ca.crt,server.crt,server.key
.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了)

第三步:可能出现的错误

补充:在签发证书的过程中容易出现的两个问题
 [root@test1 ~]# openssl ca -in dovecot.csr -out dovecot.cst
 Using configuration from /etc/pki/tls/openssl.cnf
 Enter pass phrase for /etc/pki/CA/private/my-ca.key:
 unable to load number from /etc/pki/CA/serial
 error while loading serial number
 3078239980:error:0D066096:asn1 encoding routines:a2i_ASN1_INTEGER:short line:f_int.c:215:
 提示error while loading serial number,一般是因为serial文件中没有赋初值
 解决办法
 [root@test1 ~]#cd /etc/pki/CA
 [root@test1 CA]# echo "00" >serial
 [root@test1 CA]# cat serial
 00
 
还有一个问题在CA签名时,最后出现failed to update database错误
 [root@test1 ~]#openssl ca -in dovecot.csr -out dovecot.crt
 Using configuration from /etc/pki/tls/openssl.cnf
 Enter pass phrase for /etc/pki/CA/private/my-ca.key:
 Check that the request matches the signature
 Signature ok
 Certificate Details:
 Serial Number: 2 (0x2)
 Validity
 Not Before: Jan 23 02:23:39 2013 GMT
 Not After : Jan 23 02:23:39 2014 GMT
 Subject:
 countryName = CN
 stateOrProvinceName = Hebei
 organizationName = Tianli Company
 commonName = test2
 X509v3 extensions:
 X509v3 Basic Constraints:
CA:FALSE
 Netscape Comment:
OpenSSL Generated Certificate
 X509v3 Subject Key Identifier:
96:86:28:B7:ED:2E:96:79:32:88:7E:C3:23:37:02:BC:43:1C:76:87
 X509v3 Authority Key Identifier:
keyid:4C:45:25:5F:60:7F:F8:6E:6F:B4:53:C4:FB:BD:A3:C6:82:AE:2A:62
 
Certificate is to be certified until Jan 23 02:23:39 2014 GMT (365 days)
 Sign the certificate? [y/n]:y
 
1 out of 1 certificate requests certified, commit? [y/n]y
 Write out database with 1 new entries
 Data Base Updated
 
Certificate is to be certified until Jan 23 02:17:38 2014 GMT (365 days)
 Sign the certificate? [y/n]:y
 failed to update database
 TXT_DB error number 2

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2013-01/78484p3.htm

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值