前言
最近在读OpenSSL的命令参数,在这个学习过程中发现OpenSSL之中,架构了一个非常庞大的理论系统,结果原以为学习一两天就能学完的基础知识,整整学了两个星期,才学到一些皮毛。
之前整理了一些OpenSSL相关的学习笔记,这篇将涉及一些OpenSSL中和CA有关的知识。
架设CA服务器
OpenSSL提供了CA指令用于CA服务器的模拟,这个模拟环境能够可以模拟证书的签发吊销等常见CA的操作。CA服务器的目录结构相对复杂,如下所示:
为便于测试人员使用,OpenSSL提供了一个perl脚本(/usr/lib/ssl/misc/CA.pl),以便自动生成CA的环境目录,命令序列如下所示:
命令执行后,环境中会自动生成一个自签名的CA根证书(demoCA/cacert.pem),以及对应的私钥文件(demoCA/private/cakey.pem)。
可以使用x509和rsa 两个指令查看相应文件的内容。指令如下所示:
相关字段的具体含义请参考《从百度证书开始》和《OpenSSL中的非对称算法》两篇学习笔记中的介绍。
生成证书请求
CA签发证书前,要对客户的证书请求进行验证(除了对文件的内容进行验证以外,更多的其实是申请流程的认证,提交各种不同种类的证明材料),当验证无误后才会进行证书的颁发。所以证书请求一般由客户方提出,下面分别介绍下不同种类的证书请求生成方法.
生成RSA证书请求
直接生成
在创建rsa密钥的同时生成证书请求,指令格式如下:
查看证书请求中的内容,指令格式如下:
可以看到证书请求文件中包含公钥以及证书所属者的字段,下方的Signature Algorithm字段为自己的私钥的签名值,可确保证书请求的真实性。
从RSA密钥生成
有些时候客户手中已经握有密钥,且希望从已有的密钥生成证书请求。指令如下所示:
在openssl的交互提示下录入必要的申请者信息即可。此时生成的请求文件同直接生成的请求结构大体相同,如下所示:
生成DSA证书请求
直接生成
由于dsa密钥的生成需要有一个dsa参数文件, dsa参数文件的生成可以使用以下命令:
在创建dsa密钥的同时生成证书请求,指令格式如下:
查看证书请求中的内容,指令如下所示:
DSA的证书请求看起来似乎复杂一些,但多出来的内容也只是dsa公钥的相关参数,所以单从请求结构上看还是相同的。
从DSA密钥生成
有些时候客户手中已经握有密钥,且希望从已有的密钥生成证书请求。指令如下所示:
在openssl的交互提示下录入必要的申请者信息即可。此时生成的请求文件同直接生成的请求结构大体相同,如下所示:
CA操作
签发一个证书
CA收到证书请求后,会对客户提供的各种证明资料进行审核,审核通过后会进行证书颁发工作,证书的颁发指令格式如下所示:
此时,cert.cer就是颁发完成的证书了。可以通过x509指令进行内容查看,指令如下所示:
批量签署证书请求
在“生成证书请求”的章节,已经生成了多个种类的证书,可以将这些证书放到一个目录下,进行批量签署,如下所示:
批量签署命令格式如下所示:
查看CA签署过的证书
demoCA目录下有个index文件,该文件记录着该CA签署过的证书内容,可以通过cat指令查看,如下所示:
其中第三列为证书的序列号内容,在ca指令的 status选项下,可以通过指定这个序列号,来查看这个证书当前的状态,指令如下所示:
证书吊销
当客户的密钥出现问题后(被窃取或者丢失),需要进行证书吊销,吊销指令如下所示:
吊销后在查看该证书,可以发现其已经吊销成功,如下图所示:
生成吊销列表
为了方便公众查询证书的吊销状态,ca指令提供了生成吊销列表的指令,格式如下所示:
可以通过 crl指令查看吊销列表内容,指令格式如下所示:
证书验签
证书验签方法可以参考《从百度证书开始》笔记中的相关内容。
总结
这篇学习笔记记录了OpenSSL中和CA相关的一些操作指令,以及背景知识。