2.5. 证书管理

2.5.1. 生成和签署证书请求

CA.pl -newreq 
(openssl req -config /etc/openssl.cnf -new -keyout newreq.pem -out newreq.pem \
-days 365) 

创建一个新的私钥和一个证书请求,并将其保存为 newreq.pem。输入通用名称 (CN),证书的主要用途,例如如果您想保护网站 www.sopac.org,请输入 www.sopac.org;如果您想保护 franck@sopac.org 的电子邮件,请输入 franck@sopac.org。

CA.pl -sign 
(openssl ca -config /etc/openssl.cnf -policy policy_anything -out newcert.pem \
-infiles newreq.pem) 

将使用 cacert.pem 签署请求,并将证书保存为 newcert.pem。您需要输入 cacert.pem 的密码(您的 CA 证书)。文件 newcerts/xx.pem 将被创建,并且 index.txt 和 serial 将被更新。

您的私钥在 newreq.pem 文件中 -PRIVATE KEY-,您的证书在 newcert.pem 文件中 -CERTIFICATE-

newcert.pem 的副本被放置在 newcerts/ 目录中,并在 index.txt 中添加了相应的条目,以便客户端可以通过 Web 服务器请求此信息,以确保证书的真实性。

请注意您的 newreq.pem 文件,因为它包含证书请求,但也包含您的私钥。在您签署它时,-PRIVATE KEY- 部分不是必需的。因此,如果您请求其他人签署您的证书请求,请确保您已从文件中删除 -PRIVATE KEY- 部分。如果您签署其他人的证书请求,请向此人索取其 -CERTIFICATE REQUEST- 部分,而不是其私钥。

2.5.2. 吊销证书

要吊销证书,只需发出以下命令

openssl -revoke newcert.pem

数据库已更新,证书被标记为已吊销。您现在需要生成新的已吊销证书列表

openssl ca -gencrl -config /etc/openssl.cnf -out crl/sopac-ca.crl

此证书吊销列表 (CRL) 文件应在您的网站上提供。

当您吊销证书时,您可能希望添加参数 crldays 或 crlhours 以及 crlexts。前两个参数指示何时更新下一个 CRL,最后一个参数将使用 openssl.cnf 中的 crl_exts 部分来生成 CRL v2 而不是 CRL v1。

openssl ca -gencrl -config /etc/openssl.cnf -crldays 7 -crlexts crl_ext \
-out crl/sopac-ca.crl

2.5.3. 续订证书

用户向您发送其旧的证书请求,或基于其私钥创建一个新的证书请求。

首先,您必须吊销之前的证书,然后再次签署证书请求。

要查找旧证书,请在 index.txt 文件中查找与请求对应的专有名称 (DN)。获取序列号 <xx>,并使用文件 cert/<xx>.pem 作为吊销过程的证书。

您可能需要手动签署请求,因为您必须确保新证书的有效期开始日期和结束日期是正确的。

openssl ca -config /etc/openssl.cnf -policy policy_anything -out newcert.pem \
-infiles newreq.pem -startdate [now] -enddate [previous enddate+365days]

将 [now] 和 [previous enddate+365days] 替换为正确的值。

2.5.4. 显示证书

您可能有一个编码形式的证书,要读取证书的详细信息,只需发出以下命令

openssl x509 -in newcert.pem -noout -text

2.5.5. index.txt 文件

在 index.txt 文件中,您可以找到 OpenSSL 管理的各种证书。条目用 R 标记为已吊销,V 标记为有效,E 标记为已过期。

2.5.6. 构建基于 Web 的证书颁发机构

当您是证书颁发机构 (CA) 时,有一些要求

  1. 您必须发布您的根 CA 证书,以便它可以广泛安装在应用程序中。

  2. 您必须发布吊销列表。

  3. 您必须显示证书的详细信息,并提供其序列号

  4. 您必须提供一个表单供用户提交证书请求。

所有这些要求都可以使用 Web 服务器和一些脚本来完成。

待办事项:此处为 Web 界面的代码...