1. CA命令
Openssl中CA功能命令为 ca,所以第一个关注的section就是ca了。这个section非常简单,仅包含一个key:default_ca。
三个default_crl_days,default_days和default_md,对于命令行中的crldays,days和md选项,可以通过使用这些选项来覆盖配置文件中设定的值。
Policy定义了一个和证书的DN(distinguished name)字段相同的key集合。对于每一个key或字段,有三个合法的取值:match,supplied,或者optional。Match表示证书请求(CSR)中字段必须和CA证书中的字段匹配;supplied表示证书请求中必须包含此字段。Optional表示该字段在证书请求中是可选的。
X509_extensions指定了CA签发证书时加入的一个包含该扩展的section。如果缺少该key,openssl创建的是x.509v1证书,但如果存在即使是空,创建的则是x.509V3。例子中唯一包含的扩展就是basicConstraints,我们设置为false,所以我们签发的证书就不能再做ca证书了。
2. 创建自签名证书
可以签发证书的ca同样可以用来签发CRLs。
Req中Default_bits字段用来指定openssl生成证书的私钥长度为2048字节。如果不指定,默认为512字节。对于CA证书,有必要使用长的密钥更安全。
Default_keyfile指定openssl新生成的私钥保存位置。Default_md指定对密钥签名所使用的消息摘要算法。推荐使用SHA1,而不是MD5。
Prompt和distinguished_name字段指定openssl从什么地方获取信息填充证书的distinguished name。设置prompt为no,表示指定从distinguished_name字段获取信息。默认是从用户命令行提示输入获取信息,所以这里必须关掉它。Distinguished_name字段定义的root_ca_distinguished_name中的字段值会放入到证书的每个字段中去。
最后是x509_extensions指定证书中包含的扩展项。该项中名为root_ca_extensions对应的值为true,表示该证书可以用来签发证书和CRLs。
如下命令行中选项很少,因为我们在配置文件中指定了大多数的选项。x509表示生成自签名证书。
当运行该命令时,openssl会提示两次输入密钥来加密私钥文件。
证书生成完成后,可以使用如下命令打印查看证书信息。
3. CSR(Certificate Sign Request)文件生成
很奇怪《network security with openssl》书中介绍生成自签名证书时使用从配置文件中获取DN信息,这里介绍CSR文件反倒是交互式的。其实这里也一样,事先在配置文件中设置好签发证书的DN,就不要命令行中输入那么多信息了。
配置项同req。
指定req的扩展为ca
查看CSR文件,添加的扩展是ca。
打印信息如下:
4. 对CSR进行签名:
输出如下:
如果CSR中添加的req extensions好像没什么用,还是取决ca签发命令中的extension。对于一般的用户证书,那么extension默认为user_cert即可,这里使用的是ca_cert,表示这是一个多级证书,签发的证书可以作为ca再签发下一级证书。
4.证书验证
生成的证书可以使用openssl命令来简单验证一下,如果是多级证书,可以把多个ca证书拷到ca.crt一个文件中。
CRL文件待续。
参考书籍:network security with openssl