最近要搭建strongswan环境,需要用到openssl来创建证书,着实费了一番功夫,总结一下。
一、环境:Ubuntu10.10
所有文件生成在当前目录。所有用到的文件在当前目录(除非迫不得已,比如index.txt和serial)。
二、分三步走
1、Generating a CA certificate生成CA证书(供大家用的,详解见第三步)
命令:
openssl req -x509 -days 1460 -newkey rsa:2048 -keyout strongswanKey.pem -out strongswanCert.pem
creates a 2048 bit RSA private key strongswanKey.pem and a self-signed CA certificate strongswanCert.pem with a validity of 4 years (1460 days).
生成一个Key,一个Cert,都是pem文件,要生成二进制DER格式的文件要用别的选项。
这一步问题不大。具体选项看README
2、Generating a host or user certificate生成自己的证书(每个人生成自己的)
命令:
openssl req -newkey rsa:1024 -keyout hostKey.pem -out hostReq.pem
generates a 1024 bit RSA private key hostKey.pem and a certificate request hostReq.pem which has to be signed by the CA.
这一步要和第一步中填的“组织名”等必须相同,建议除姓名邮箱这些之外,全和第一步一样(密码当然不用)。
只生成一个Key。
这一步问题也不大。
3、Now the certificate request can be signed by the CA with the command用第一步生成的CA证书加密第二步生成的证书
第一步生成的证书是供大家用的(大家用同一个),第二部生成的每个人单独生成一个。
这里问题就大了。先看README给出的命令:
openssl ca -in hostReq.pem -days 730 -out hostCert.pem -notext
问题是:openssl生成的每一个文件(如hostCert.pem、index.txt、serial等)以及需要的每一个文件(如hostReq.pem),默认都要在某几个文件夹下。它会去当前路径的那些文件夹里面找。但是那些文件夹是不存在的(它安装的时候不会建,也不会提示你都有哪些,你只能一个一个试,试到吐血。。。),而且它找不到也不会自己去建,即使加了sudo也不会。因此最简单的方法就是指定文件路径,实在不能指定了再去建。
总结命令如下:openssl ca -in ./hostReq.pem -days 730 -keyfile ./strongswanKey.pem -cert ./strongswanCert.pem -out hostCert.pem -outdir ./ -notext
要求:必须在当前目录下新建一个demoCA文件夹,其中新建一个空的index.txt(必须为空,每次执行前都要提前清空,最好:rm后touch一个)和一个serial文件,serial文件中放个数字(最好别是0,最好以0开头,比如01)。建议这两个文件的操作都在终端下进行,因为操作过程中有几次直接双击打开编辑openssl运行失败。
原因是openssl命令选项中没有指定index.txt和serial路径的选项。。。
index.txt就是记录数据库。serial就是读取其中的那个数字,生成个以这个数字为名字的pem文件,且数字每次自增1。
三、实在有够吐血。吐血。。吐血。。。