openssl生成tls证书

x509证书一般会用到三类文,key,csr,crt。

Key 是私用密钥openssl格,通常是rsa算法。

Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。

Crt 是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。

一、准备工作

ubuntu下新建文件夹/etc/certstore/,接下来的所有操作都在改文件夹下进行。

首先在/usr/lib/ssl/文件夹下拷贝文件openssl.cnf文件到/etc/certstore/文件夹下,并将该配置文件的路径修改为当前路径,如下

[ CA_default ]
dir  = ./                                # Where everything is kept
certs  = $dir/certs                      # Where the issued certs are kept    #内部文件需生成(用户证书)
crl_dir  = $dir/crl                      # Where the issued crl are kept
database = $dir/index.txt                # database index file.
new_certs_dir = $dir/newcerts            # default place for new certs.          #内部文件在生成用户证书时自动生成(用户公钥)
certificate = $dir/cacert.pem            # The CA certificate            #需生成(根证书)
serial  = $dir/serial                    # The current serial number
crl  = $dir/crl.pem                      # The current CRL              #
private_key = $dir/private/cakey.pem     # The private key              #需生成(根私钥)
RANDFILE = $dir/private/.rand            # private random number file

然后添加或创建一些文件或文件夹,如下

#mkdir -p ./{private,certs,newcerts,crl}
#touch index.txt
#echo 01 > serial

二、生成CA证书的步骤:

1.生成CA证书的RSA密钥对

/etc/certstore# openssl genrsa -des3 -out ./private/cakey.pem 2048

这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:

# openssl rsa -in server.key -out server.key 

*2.生成CA证书请求

/etc/certstore# openssl req -new -days 365 -key ./private/cakey.pem -out ./private/careq.pem    (cert.csr)

(CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.)

*3.对CA证书请求进行签名

#openssl ca -selfsign -in ./private/careq.pem -out cacert.pem

4.(合并步骤2&3)一步完成CA证书请求及签名

/etc/certstore# openssl req -new -x509 -days 3650 -key ./private/cakey.pem -out cacert.pem -config openssl.cnf

 5.查看pem证书:

# openssl x509 -in cacert.pem -text -noout
三、生成CA自签名证书
/etc/certstore# openssl genrsa -des3 -out ./certs/cert.key -rand ./private/.rnd 2048
/etc/certstore# openssl req -new -x509 -days 3650 -key ./certs/cert.key -out ./certs/cert.crt -config openssl.cnf
/etc/certstore# openssl ca -ss_cert ./certs/cert.crt -policy policy_anything -out ./certs/signedcert.crt -config openssl.cnf
用第一步生成的CA证书(cacert.pem)加密第二步生成的证书(./certs/cert.crt)

第一步生成的证书是供大家用的(大家用同一个),第二步生成的每个人单独生成一个。

(1)查看key私钥文件:

# openssl rsa -in ./certs/cert.key -text -noout

(2)将pem证书装换成der证书的方法:

# openssl x509 -in tom.crt -out cert.der -outform DER

(3)如果创建证书失败,失败后重做的方法:

serial文件中删除证书序列号; index.txt数据库文件中删除该证书的条目; 重新创建证书就可以了。

四、此时,文件结构如下:

.
|-- certs
|   |-- cert.crt
|   |-- cert.key
|   `-- signedcert.crt
|-- crl
|-- newcerts
|   `-- 01.pem
|-- prvate
|   `-- cakey.pem
|-- cacert.pem
|-- index.txt
|-- index.txt.attr
|-- index.txt.old
|-- openssl.cnf
|-- serial
`-- serial.old
 了解了这些基础步骤之后,就可以通过脚本,甚至 makefile 的方式来将这些工作自动化。

 CA.pl 和 CA.sh 便是对 OpenSSL 的 CA 相关功能的简单封装,在 Debian 系统中,安装了 OpenSSL 后,可以在 /usr/lib/ssl/misc/ 目录下找到这两个文件。

 而 makefile 的解决方案则可以参考这里 。

 

 参考资料:

使用openssl创建CA》 (http://blog.chinaunix.net/uid-20639449-id-1908987.html)

《openssl根证书生成及签发用户证书》(http://www.360doc.com/content/16/0506/15/33079507_556777359.shtml)

posted @ 2019-09-28 20:56  懒懒的小猪  阅读(2500)  评论(0编辑  收藏  举报