windows - 使用 CertReq.exe,如何对 Subject 中的特殊字符进行编码

标签 windows sdk distinguishedname

我们正在使用 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/

相关文章:

c - 从 ASN.1 格式的证书获取 DN

REGEX - 从专有名称中提取 OU

c# - 为什么在 active directory 组中不能创建为 groupType = Local

在 Maven 构建单元测试中(在 Windows 上),Java XMLStreamWriter 将 '£' 序列化为不同的字节数据

python - 在 Python 中打开从 Linux 到 Windows 的 URL 命令

javascript - Quickblox JS SDK 在创建对话框时通知Occupants

android - "v17 leanback library"(android tv 支持库)可以支持 2.x 或 4.x 设备吗?

vb.net - 使用命令行将 *.xls 或 *.xlsx 文件转换为管道分隔的 .csv 文件

c# - 如何确定当前Windows定时器的分辨率?

javascript - React SDK可以在纯JavaScript中使用吗?