【问题标题】:Parsing a DN from certificate in pem format (correct order)从 pem 格式的证书中解析 DN(正确的顺序)
【发布时间】:2022-03-24 17:05:28
【问题描述】:

我看过一些关于从 PEM 格式的证书解析 DN 的帖子。我正在编写一个 UNIX 脚本,它将读取给定路径中的 pem 文件并以正确的顺序吐出它们对应的专有名称 (DN)。创建了一个简单的脚本,但在脚本中解析 pem 文件的命令是..

openssl x509 -in 文件名.pem> -noout -subject

我的困惑是,当我运行上述命令时,它以 /C=US/ST=... 开头的顺序吐出 DN,但我知道证书 DN 以“CN=”开头,即与命令吐出的内容完全相反。我很难相信运行哪个命令会给我提供确切的顺序,因为我使用该顺序来验证用户,如果我以错误的顺序登录,请求将不会被授权并且它会破坏目的。

【问题讨论】:

标签: certificate x509certificate x509 client-certificates


【解决方案1】:

DN 组件的顺序是约定俗成的。
二进制 DER 编码中的物理顺序是 OpenSSL 在此处向您显示的顺序。
大多数工具使用并在 RFC 2253 中标准化的逻辑标准是您所期望的。

这种“/C=US/ST=...”格式是旧的 OpenSSL 格式,现在已过时。如果这是您默认使用 OpenSSL 获得的版本,那么您使用的是非常旧的版本,可能应该用更新的版本替换它。

为了控制 OpenSSL 如何显示主题,您需要使用 -nameopt 选项。你可以的值是:
-nameopt rfc2253:你想要的顺序,名字是“CN=xxx,OU=xxx,ST=xxx,C=FR”(没有空格, 倒序)。
-nameopt oneline:名称将为“C = FR, ST = xxx , OU = xxx , CN = xxx”。
-nameopt compat :名称将是“/C=US/ST=xxx/OU=xxx/CN=xxx”(没有空格)。

还有一件事,如果您比较 DN 的字符串来验证客户端,获得合理可靠结果的唯一方法是在最初和验证时使用完全相同的工具生成它。一旦 DN 包含一个不太常见的元素,工具之间就会有太多的变化,以在不使用相同的版本和相同的版本时获得 DN 的相同字符串表示。

【讨论】:

    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2014-07-27
    • 2016-06-02
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多