OpenSSL CSR主题行随emailAddress的使用而变化

OpenSSL CSR主题行随emailAddress的使用而变化,openssl,x509,Openssl,X509,我正在编写一个简单的脚本,为我们的员工生成CSR,而他们不必担心openssl所需的所有繁琐的位openssl,我注意到主题的emailAddress部分存在一个问题 填写CLI提供的选项时,我的主题大致如下: Subject: C=UK, L=London, O=Org, OU=Unit, CN=my.domain/emailAddress=me@my.domain 如果我在命令行上使用-subc选项并保持参数的顺序相同,结果是相同的: $ openssl req -new -key my.

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

填写CLI提供的选项时,我的主题大致如下:

Subject: C=UK, L=London, O=Org, OU=Unit, CN=my.domain/emailAddress=me@my.domain
如果我在命令行上使用
-subc
选项并保持参数的顺序相同,结果是相同的:

$ 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"
给予

但是,如果我把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
我想了解的是:

  • CommonName的具体用途是什么
  • my.domain/emailAddress=me@my.domain
    有效的公用名
  • emailAddress
    是有效的主题名称吗
  • 证书用于客户端身份验证,从安全角度来看,我认为这并不重要,但我很好奇

    (要么缺少此信息,要么我不理解……可能是以后)

    参考X.520(…“标准属性集已在X.500系列规范[X.520]中定义”)。(参见链接的PDF,第6.2.2节)对CommonName是什么进行了一些一般性的讨论。一句话的引语可能是:

    …它是一个(可能不明确的)名称,通过该名称,对象在某些有限范围内(如组织)是众所周知的,并且符合与其相关的国家或文化的命名约定

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

    > Is emailAddress a valid subject name?
    
    您是否打算询问“emailAddress是否是主题名称表示的有效部分”

    主题名称,根据“…必须包含X.500可分辨名称”。反过来,根据RFC1779,可分辨名称是一个键值对列表,任何具有OID的都可以是键。可以使用“关键字”代替数字OID;RFC1779 friendly声明“IANA维护一个有效关键字的注册。”嗯,
    emailAddress
    有,所以它应该算作“有效”。这一点在本节中特别提到。(当然,OpenSSL可以识别它;它列在
    objects.h
    标题中。)

    对我来说,它看起来像前者


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

    精彩的答案,还有更多的文档要读!:)非常感谢。关于差异,通常只改变了参数的顺序(afaik)。我注意到我的openssl版本实际上是libressl(谢谢mac),所以这可能就是它给出旧表示的原因。
    > What is CommonName specifically for?
    
    > Is my.domain/emailAddress=me@my.domain a valid CommonName?
    
    > Is emailAddress a valid subject name?
    
    > (RFC5280 is either lacking this information or I don't 
    > understand it... probably the later)