使用CertReq.exe,如何在主题中编码特殊字符

我们正在使用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,因为你期待它。