我们正在使用Microsoft Certificate Request(CertReq.exe)以编程方式构build证书请求。 为此,我们必须创buildinputINF文件, 请参阅文档 。
Subject属性被定义为Relative Distinguished Name string values
,应按照RFC 1779的规定进行编码。
这基本上意味着通过在\
加上一些字符( "
, +
,, ;
, <
, >
或\
)”。
问题是,我无法弄清楚,如何正确编码具有属性“O = Foo + Bar”的主题。
input(相关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")
重复的转义(使用"
and "
)是RFC 1799所不鼓励的,但似乎解决了LDAP查询中的问题( 请参阅 fi),但我们也尝试不使用引号来指定主题,但得到了另一个不想要的结果。
input:
[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(相对可分辨名称)的正确方法?
通常+
字符有特殊的意义。 你可以像这样禁用这个行为,就像使用其他任何方式一样使用+
字符。
Subject = CN=www.foo.de,OU=Foobar,O=Foo + Bar,L=Foo,S=Bar,C=DE X500NameFlags = 0x20000000
通常保留加号字符以分隔多值RDN的多个值。
我不完全确定为什么转义它不符合CertEnroll,因为你期待它。