我们正在使用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(相对可分辨名称)的正确方法是什么?
答案 0 :(得分:1)
通常+
字符具有特殊含义。您可以像这样禁用该行为,只需使用+
字符,就像使用其他任何字符一样。
Subject = CN=www.foo.de,OU=Foobar,O=Foo + Bar,L=Foo,S=Bar,C=DE
X500NameFlags = 0x20000000
通常保留加号字符以分隔多值RDN的多个值。
我不完全确定为什么逃避它不能像你期望的那样使用CertEnroll。