使用CertReq.exe,如何编码主题

时间:2015-10-08 13:24:36

标签: windows sdk distinguishedname

我们正在使用Microsoft证书申请(CertReq.exe)以编程方式构建证书申请。为此,我们必须创建输入INF文件see docs here

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

这实际上意味着简单地转义一些字符("+,;<>或{ {1}})前缀为\

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

输入(相关的INF部分):

\

输出:

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

RFC 1799不鼓励重复转义(使用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") "),但似乎解决了LDAP查询中的问题(see here,f.i。)。 但是,我们也尝试过不要使用引号来指定主题,但会得到另一个不需要的结果。

输入:

\

输出:

[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(相对可分辨名称)的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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

通常保留加号字符以分隔多值RDN的多个值。

我不完全确定为什么逃避它不能像你期望的那样使用CertEnroll。