openssl:使用非DNS主题替代名称生成证书请求

要使用openssl创build一个包含主机替代名称(SAN)的证书请求,我可以使用像这样的configuration文件(剪切):

[req] req_extensions = v3_req [ v3_req ] subjectAltName = @alt_names [alt_names] DNS = xyz.example.com 

如果我需要提供专有名称或用户主体名称,应如何为用户证书申请configurationalt_names部分?
例如,我试了一下

 [alt_names] UPN = [email protected] 

但是我得到这个错误:

 Error Loading request extension section v3_req 5356:error:22075075:X509 V3 routines:v2i_GENERAL_NAME_ex:unsupported option:.\crypto\x509v3\v3_alt.c:557:name=userPrincipalName 5356:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:.\crypto\x509v3\v3_conf.c:93:name=subjectAltName, value=@alt_names 

您可以指定几乎任何您的CA允许的内容。

相关的RFC是RFC5280 。 它在第4.2.1.6节中说。 “主题备选名称”

主题替代名称扩展允许将身份绑定到证书的主题。 这些身份可以被包括在证书的主题字段之外或代替身份。 定义的选项包括互联网电子邮件地址,DNS名称,IP地址和统一资源标识符(URI)。 还有其他选项,包括完全本地定义。 可以包含多个名称forms和每个名称forms的多个实例。 每当这样的身份被绑定到证书中时,必须使用主题替代名称(或发行者替代名称)扩展; 然而,如4.1.2.4节所述,DNS名称也可以使用domainComponent属性在主题字段中表示。 请注意,如果在主题字段中表示这样的名称,则不需要将它们转换为DNS名称。

您应该阅读该部分的其余部分,然后检查您的CA支持什么。 值得注意的是,您的CA 必须validation所有主题替代名称是否正确。

RFC使用电子邮件地址在4.1.2.6节中提到

使用电子邮件地址生成新证书的合规实现必须使用主题替代名称扩展(第4.2.1.6节)中的rfc822Name来描述这样的身份。 在主题专有名称中同时包含emailAddress属性以支持旧版实现已过时,但已被允许。

所以,而不是UPI,你应该使用rfc822Name。

在尝试了一些选项(感谢Jenny)之后,我刚刚检查了源代码,发现configuration文件需要以下值之一:

  • 电子邮件
  • URI
  • DNS
  • RID
  • IP
  • DIRNAME
  • 其他名字

所以在我的情况下,我写道

 [alt_names] email = [email protected] 

然后openssl生成请求文件。