openssl生成tls证书
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)