生成多域名证书签名请求(CSR)

33

如何为多个域名生成CSR。

我发现为单个域名生成CSR的方法如下:

openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr

但是我该如何生成多域CSR呢?


4
可能更适合放在ServerFault上:已投票移动。 - Bruno
Bruno的回答中的最后一段是我认为最好的答案 - 不用担心,只需在CSR中指定主域或单个域,稍后在生成证书时添加其他域即可。在ssls.com上对我有效。 - Adam Nofsinger
1个回答

36
为了支持多个域名的X.509证书,必须根据RFC 2818 (HTTP over TLS)(或RFC 6125)使用多个Subject Alternative Name DNS条目:
如果存在类型为dNSName的subjectAltName扩展,则必须将其用作标识。否则,必须使用证书主体字段中最具体的通用名称字段。虽然使用通用名称是现有的做法,但已弃用,并鼓励认证机构改用dNSName。
匹配使用[RFC2459]指定的匹配规则执行。如果证书中存在给定类型的多个标识(例如,多个dNSName名称),则在任何一个集合中匹配都被视为可接受的。
this document所述(除了我也会在genrsa命令中使用-des3来保护私钥):
  • 复制您的初始openssl.cnf文件(原始文件可能在Linux的/etc目录下)。
  • 编辑它,在[ req ]部分中添加req_extensions = v3_req
  • 编辑它,在[ v3_req ]部分中添加subjectAltName=DNS:www.example.com,DNS:www.other-example.com(每个所需主机名一个DNS:条目)。
  • 让OpenSSL使用该配置文件。使用OPENSSL_CONF=/path/to/your/openssl.cnf openssl req ...调用它。
说了这么多,我不认为在CSR中设置任何扩展名会有太大的问题。任何一个好的CA都应该忽略你在CSR中设置的任何内容,并且只在实际颁发证书时设置他们实际验证过的内容。他们会很乐意替换您主题DN中的任何RDN(例如国家、组织等)以及任何扩展名(SAN或密钥用途)。首先,如果他们让申请人按照CSR请求的任何扩展名,这将是一种安全风险,因为有些申请人可能真的得到任何东西。其次,这就是他们赚取额外收入的方式,通过在这里和那里设置一些位(例如代码签名扩展)向您收费:他们将确保您在证书中只获得您所付款项的内容。不过,我理解您可能想在CSR中提出所有要求的名称,以确保万无一失。

非常感谢您关于CSR中不必指定所有计划保护的域名的评论。我之前一直在纠结这个问题,但听从了这个建议后,确实发现ssls.com有一个机制可以在导入CSR后添加其他域名。 - Adam Nofsinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接