使用 emailAddress 的 OpenSSL CSR 主题行变体

OpenSSL CSR subject line variation with use of emailAddress

我正在编写一个简单的脚本来为我们的员工生成 CSR,而他们不必担心 openssl 需要的所有繁琐位,并且我注意到 emailAddress 部分存在问题主题。

填写CLI给出的选项时,我的主题大致是:

Subject: C=UK, L=London, O=Org, OU=Unit, CN=my.domain/emailAddress=me@my.domain

如果我在命令行中使用 -subj 选项并保持参数顺序相同,结果是相同的:

$ openssl req -new -key my.key -out my.csr \
    -subj="/C=UK/L=London/O=Org/OU=Unit/CN=my.domain/emailAddress=me@my.domain"

给予

Subject: C=UK, L=London, O=Org, OU=Unit, CN=my.domain/emailAddress=me@my.domain

但是,如果我把 emailAddress 放在前面

$ openssl req -new -key my.key -out my.csr \
    -subj="/emailAddress=me@my.domain/C=UK/L=London/O=Org/OU=Unit/CN=my.domain"

我明白了

Subject: emailAddress=me@my.domain, C=UK, L=London, O=Org, OU=Unit, CN=my.domain

我想了解的是:

  1. CommonName 具体 的用途是什么?
  2. my.domain/emailAddress=me@my.domain 是有效的 CommonName 吗?
  3. emailAddress 是有效的主题名称吗?

这些证书用于客户端身份验证,从安全的角度来看,我认为这无关紧要,但我很好奇。

RFC5280 要么缺少这些信息,要么我不明白...可能是后者)

> What is CommonName specifically for?

RFC5280, sec. 4.1.2.4 refers to X.520 (..."Standard sets of attributes have been defined in the X.500 series of specifications [X.520]"). ITU-T recommendation on X.520(参见链接的 PDF,第 6.2.2 节)对 CommonName 是什么进行了一些一般性讨论。 one-sentence 引用可能是:

...它是一个(可能有歧义的)名称,object 在某些有限范围内(例如一个组织)通常被称为并符合该名称的命名约定与之相关的国家或文化。

> Is my.domain/emailAddress=me@my.domain a valid CommonName?

CommonName 可能包含任意字符串,因此这将是一个有效的 CN。 但是您的 CSR 没有。 事实上,您的两个 CSR 都有 CN=my.domain。 OpenSSL 仅通过斜杠 显示 emailAddress 主题字段,这确实令人困惑! (OpenSSL FAQ calls this“旧行为”;我不知道为什么“旧行为”中存在这种行为。)OpenSSL req 有选项 -nameopt(记录在 man x509 ), 例如openssl req [...] -nameopt RFC2253 将向您展示该主题而不会造成此类混淆。

> Is emailAddress a valid subject name?

您是否打算询问“emailAddress 是主题名称表示的有效部分”?

学科名称,根据RFC5280 4.1.2.6, "...MUST contain an X.500 distinguished name". In turn, distinguished name, according to RFC1779, is a list of key-value pairs, and anything with an OID can be the key. Instead of the numerical OID, a "keyword" may be used; RFC1779 friendly states that "A register of valid keywords is maintained by the IANA." Well, emailAddress has OID 1.2.840.113549.1.9.1, so it should count as "valid". It is specifically mentioned in RFC2985。 (当然 OpenSSL 可以识别它;它列在 objects.h header 中。)

> (RFC5280 is either lacking this information or I don't 
> understand it... probably the later)

我觉得是前者!

现在,您问题中的一件事对我来说仍然是一个问题:您演示的两个 CSR 有什么不同,这使得 openssl req 以两种不同的方式显示它们 .