从 CSR 检索发出的证书

retrieve an emitted certificate from the CSR

在证书颁发机构的上下文中,我正在尝试从 CA index.txt 检索有效的实时证书(如果有的话),以便在从初始 CSR 更新它之前将其撤销。

在我的 index.txt 中,我正在查找的行是

V       200605120159Z           D486D9E32C4DE4BA        unknown /C=LU/ST=Luxembourg/L=Luxembourg/O=My Org/OU=My Unit/CN=myhost.fqdn/emailAddress=ca@initech.com

我可以通过

在 CSR 中获取主题
openssl req -noout -subject -in sub/csr/myhost.csr.pem

那得到

subject=C = LU, ST = Luxembourg, L = Luxembourg, O = My Org, OU = My Unit, emailAddress = ca@initech.com, CN = myhost.fqdn

我可以翻译 sed

openssl req -noout -subject -in sub/csr/myhost.csr.pem \
| sed -e 's/subject=/\//' -e 's/ = /=/g' -e 's/, /\//g'

但是结果

/C=LU/ST=Luxembourg/L=Luxembourg/O=My Org/OU=My Unit/emailAddress=ca@initech.com/CN=myhost.fqdn

index.txt 中的行不匹配,因为字段的顺序不同。

是否可以将证书的主题与CSR的主题进行比较?

如果您想固定 CSR 中字段的顺序,您可以尝试使用 awk:

openssl req -noout -subject -in sub/csr/myhost.csr.pem  | awk -F', ' -v OFS='/' '{sub(/^subject=/,"");gsub(" = ","=");print ,,,,,}'

-F', ' 设置输入字段分隔符,-v OFS='/' 设置输出字段分隔符。

第一个 sub 命令删除 subject= 字符串,第二个命令 gsub 压缩 = 字符周围的空格。

然后打印该行。注意第 6 和第 7 字段的反转。


但最好根据openssl配置文件openssl.cnf固定主题字段的顺序(通常位于/etc/ssl/usr/ssl)在[ req_distinguished_name ] 部分。