ref: http://rhythm-zju.blog.163.com/blog/static/310042008015115718637/
利用 OpenSSL 建立 CA 及自行签发证书。
在CA的配置文件中,有说明默认CA的目录。 创建默认CA下的目录及文件如下图(.old文件和.attr文件是签发证书后自动生成的文件)。
其中, newcerts目录用于存放CA签署(颁发)过的数字证书(证书备份目录)。 PRivate目录用于存放CA的私钥。 文件serial和index.txt分别用于存放下一个证书的序列号和证书信息数据库。 文件serial填写第一个证书序列号(如10000001),之后每前一张证书,序列号自动加1。
genrsa——用于生成 RSA 密钥对的 OpenSSL 命令。
openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048
-des3
使用 3-DES 对称加密算法加密密钥对,该参数需要用户在密钥生成过程中输入一个口令用于加密。今后使用该密钥对时,需要输入相应的口令。如果不加该选项,则不对密钥进行加密。
req——用于生成证书请求的 OpenSSL 命令。
openssl req -new -days 365 -key ./demoCA/private/cakey.pem -out careq.pem
-new 生成一个新的证书请求。该参数将令 OpenSSL 在证书请求生成过程中要求用户填写一些相应的字段。
-days 365 从生成之时算起,证书时效为 365 天。
-key ./demoCA/private/cakey.pem 指定 ./demoCA/private/cakey.pem 为证书所使用的密钥对文件。
-out careq.pem 令生成的证书请求保存到文件 careq.pem 。
ca——用于执行 CA 相关操作的 OpenSSL 命令。 OpenSSL 使用证书请求中附带的密钥对对该请求进行签名,也就是所谓的“ self sign ”(自签名)。
openssl ca -selfsign -in careq.pem -out cacert.pem
-selfsign 使用对证书请求进行签名的密钥对来签发证书。
-in careq.pem 指定 careq.pem 为证书请求文件。
-out cacert.pem 指定 cacert.pem 为输出的CA根证书。
第三步和第四步,可以用一条命令来完成。
openssl req -new -x509 -days 365 -key ./demoCA/private/cakey.pem -out cacert.pem
关键参数:-x509
openssl genrsa -des3 -passout pass:123456 -out userkey.pem 1024
-passout arg: arg为对称加密的密码(使用这个参数就省去了console交互提示输入密码的环节)
openssl req -new -days 365 -key userkey.pem -out userreq.pem
openssl ca -in userreq.pem -out usercert.pem
原因:CA根证书找不到,第4步生成的根证书放的位置不对。把4步生成的cacert.pem移动到./demoCA目录下即可。
仍然失败,原因:证书请求文件的单位名称和CA根证书的证书请求文件的单位名称不一致。而在Openssl的配置文件中,要求一致。 将[policy_match]的
organizationName = match
改为:organizationName = optional
再次签名成功了。
openssl x509 -in usercert.pem -text -noout
将证书文件后缀名改为crt,在Windows中可以直接查看。
新闻热点
疑难解答