2

我们正在使用 Microsoft 证书请求 (CertReq.exe) 以编程方式构建证书请求。为此,我们必须创建输入 INF 文件,请参阅此处的文档

Subject 属性定义为Relative Distinguished Name string values,应按照RFC 1779的规定进行编码。

这实质上意味着通过添加前缀来简单地转义某些字符( ", +, ,, ;, <, >, or ) 。\\

问题是,我无法弄清楚如何正确编码具有“O = Foo + Bar”属性的主题。

输入(相关INF部分):

[NewRequest]
Subject = "CN=www.foo.de,OU=Foobar,O=Foo \+ Bar,L=Foo,S=Bar,C=DE"

输出:

The string contains an invalid X500 name attribute key, oid, value or delimiter. 0x80092023 (-2146885597 CRYPT_E_INVALID_X500_STRING)
c:\file_path.inf([NewRequest] Subject = "CN=www.foo.de,OU=Foobar,O=Foo \+ Bar,L=Foo,S=Bar,C=DE")

RFC 1799 不鼓励重复转义(使用"and \),但似乎可以解决 LDAP 查询中的问题(参见此处,fi)。但是,我们也尝试过不使用引用来指定主题,但得到了另一个不需要的结果。

输入:

[NewRequest]
Subject = CN=www.foo.de,OU=Foobar,O=Foo \+ Bar,L=Foo,S=Bar,C=DE

输出:

The data is invalid. 0x8007000d (WIN32: 13 ERROR_INVALID_DATA)
c:\file_path.inf([NewRequest] Subject = "CN=www.foo.de", "OU=Foobar", "O=Foo \+ Bar", "L=Foo", "S=Bar", "C=DE")

整个过程在没有+标志的情况下工作。在 INF 文件中编码 RDN(相对专有名称)的正确方法是什么?

4

1 回答 1

1

通常,该+字符具有特殊含义。您可以像这样禁用该行为,并像使用+其他任何角色一样使用该角色。

Subject = CN=www.foo.de,OU=Foobar,O=Foo + Bar,L=Foo,S=Bar,C=DE
X500NameFlags = 0x20000000

加号通常保留用于分隔多值 RDN 的多个值。

我不完全确定为什么转义它不能像您期望的那样与 CertEnroll 一起使用。

于 2015-10-08T13:41:58.993 回答