首页 > 解决方案 > 从 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 的主题?

标签: opensslx509certificateca

解决方案


如果要修复 CSR 中字段的顺序,可以尝试使用awk

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

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

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

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


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


推荐阅读