【问题标题】:retrieve an emitted certificate from the CSR从 CSR 检索颁发的证书
【发布时间】:2018-06-06 12:36:16
【问题描述】:

在证书颁发机构的上下文中,我正在尝试从 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 的主题?

【问题讨论】:

  • 通常颁发新证书不会撤销旧证书,因为它会创建一个操作竞争条件,即主体必须在 CRL(或 OCSP 源)获得之前完全获得新证书更新。延迟是合理的(GoDaddy CA 有 72 小时的延迟),但比简单地让客户端启动撤销(或不启动,只是等待到期)更难。
  • @bartonjs:是的,这是有道理的,因为在撤销时我会在同一步骤中重新生成 CRL。因此,在新证书设置之前的一段时间内,客户端(内部基础架构)可能不信任服务器。我的问题没用:o(

标签: openssl x509certificate ca


【解决方案1】:

如果您想修复 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/ssl/usr/ssl)中[ req_distinguished_name ]部分固定主题字段的顺序。

【讨论】:

  • 在这种特定情况下似乎还可以,但我不能保证未来 CSR 的内容可能在其主题中包含其他字段以及它们将如何存储在索引中。
  • @Seki 如果没有被命令行覆盖,主题字段的顺序是在文件openssl.cnf中指定的顺序。
  • 宾果游戏!您让我明白了为什么这些字段的顺序不同:由于某种原因,CSR 是使用具有不同(内联)配置的脚本制作的,其中 distinguished_name 定义与 CA 的 openssl.cnf 不同。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2014-12-26
相关资源
最近更新 更多