我们正在使用 Microsoft 证书请求 (CertReq.exe) 以编程方式构建证书请求。为此,我们必须创建输入 INF 文件 see docs here。
Subject 属性被定义为 Relative Distinguished Name string values
,它应该像 RFC 1779 指定的那样被编码。
这实质上意味着通过在其前面加上 "
来简单地转义某些字符(+
、,
、;
、<
、>
、\
或 \
)。
问题是,我不知道如何正确编码具有属性“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 不鼓励重复转义(使用 "
和 \
),但似乎解决了 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(相对可分辨名称)进行编码的正确方法是什么?
最佳答案
通常 +
字符具有特殊含义。您可以像这样禁用该行为,并像使用任何其他字符一样使用 +
字符。
Subject = CN=www.foo.de,OU=Foobar,O=Foo + Bar,L=Foo,S=Bar,C=DE
X500NameFlags = 0x20000000
加号字符通常保留用于分隔多值 RDN 的多个值。
我不完全确定为什么转义它不能像您期望的那样与 CertEnroll 一起工作。
关于windows - 使用 CertReq.exe,如何对 Subject 中的特殊字符进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017176/