将主题备用名称(SAN)添加到现有的证书签名请求(CSR)


9

谁能告诉我如何在现有的CSR中添加多个主题备用名称?

我不是在谈论用SAN生成CSR或在签名时添加SAN-我知道如何做这两个事情。

背景:我们遇到的问题是HP刀片机箱允许您生成CSR,但它们仅允许一个SAN。我们无法使用在其他位置生成的CSR,因为我们无法使用生成的证书,因为无法(我可以找到)将密钥上传到刀片服务器机箱。

我们的CA的标准流程不允许添加SAN正在签名。他们愿意尝试,但是我正在尽力寻找一个解决方案,因为这将意味着我们将不必依靠他们拥有非标准流程-根据我的经验,如果他们需要使用非标准流程生活最终将变得艰难。例如,由于请假等原因导致不了解非标准流程的工作人员出现时。

当前的方法是通过Web gui连接到板载管理员admin并使用单个CN生成CSR。

Web GUI仅允许在CSR中使用单个SAN。

然后,我们在openssl配置中使用以下节对它进行自签名:

[ v3_ca ]
subjectAltName = "DNS:bladesystem8,DNS:bladesystem8.services.adelaide.edu.au,DNS:bladesystem8-backup,DNS:bladesystem8-backup.services.adelaide.edu.au"

生成的证书具有额外的SAN。


您目前如何在刀片服务器机箱上生成证书?您正在使用什么方法进行连接等。什么型号的刀片服务器机箱?
伊莱(Eli)

机箱是c7000。是的,我们目前正在机箱上创建CSR,并在签名时添加SAN,但这是针对自签名证书的。
詹森·谭

您目前使用什么方法连接到它,以及为它生成证书的过程是什么?
伊莱(Eli)

我已经编辑了主要问题,以包括当前方法。
詹森·谭

1
如果在另一台计算机上生成证书和私钥并将其导出并导出,可以导入该证书和私钥吗?
克林特(Clint)

Answers:


15

如果您的机箱不支持添加SAN,则需要从机箱上拿走钥匙,并使用openssl生成CSR。

确保req_extensions = v3_req在本[ req ]节中未注释。

将添加subjectAltName[ v3_req ]部分。

生成新的CSR。

openssl req -new -key extracted_c7000.key -out your_new.csr

您无法编辑现有的CSR。


Cakemox怎么说。如果您可以在签署证书后编辑证书(即已签署的CSR),那么它将无法达到证书颁发机构的全部目的。
MadHatter

我不想在CSR签名后进行编辑-就像您所说的打败人偶一样。我想在生成CSR之后对其进行编辑,但是要在签名之前进行。完全可以在使用openssl签名之前编辑CSR的各个部分。
詹森·谭

如果我可以下载密钥,我会的。抱歉,在最初的问题中我没有提到这一点,但是我无法找到下载该密钥的方法。我很乐意将赏金支付给可以告诉我如何下载密钥的人。
詹森·谭

仅供参考-绝对可以在使用openssl进行签名之前编辑CSR的某些部分,尤其是使用“ openssl req -subj”选项。但是,据我所知,这不会添加v3 SAN扩展,它仅允许您指定一个包含附加CN的新主题行。
詹森·谭

2
CSR由计算机的私钥签名,因此生成后不能对其进行编辑(否则将无法对其进行签名)。但是,CA可能会编辑放入公共证书中的字段。这是更改SAN字段的唯一方法(如果将其发送到公共CA,则无法控制)。
克里斯·S

0

重要说明: 所有这些在某种程度上都是推测性的,因此,如果您深入了解代码,并且与我所说的不一致,请相信代码。我不是CA专家,我只是在电视上玩。说:

作为企业社会责任的一个特点,这将很艰难。以编程方式生成CSR的最后一步是,对您创建的所有内容进行哈希处理,然后使用私钥对其进行签名。因此,尽管您可以将这些属性添加到CSR的文本中,但签名不会与内容匹配,因此没有CA会对其进行签名。

但是,就您而言,您可以控制(或至少与之联系)CA。这给您两个选择:

  1. 您可以指示CA随意忽略CSR上的签名并以任何方式颁发证书。
  2. 您可以让CA颁发与要求的证书不同的证书(例如,通过添加属性)。

其中,#1似乎是最容易的。您需要打破OpenSSL上的防篡改标识才能执行此操作,但是它具有一些功能,应该会使使用起来更加容易。我将从asn1parse开始,它将向您展示如何分解CSR。


在进一步的研究,选项#2其实原因很简单,也和由许多CA的的进行(例如添加site.comwww.site.com证书作为SAN)。
BMDan 2011年

0

虽然cakemox的答案无疑是最简单的答案,但是如果您不能以某种方式获得私钥的副本,则还有另一种方法,那就是您不能使用“注册代理”证书来重新签署CSR。

这篇css-security.com博客文章包含所有细腻的细节。但是,该过程的高级概述如下所示:

  • 获得注册代理证书
  • 修改SSL证书模板以要求颁发EA证书
  • 获取需要SAN信息的CSR
  • 在添加SAN信息时,使用EA证书来退出CSR。

当我亲自尝试时,我很确定我跳过了有关修改证书模板的部分。假设您可以自己生成一个注册代理证书,则实际过程如下所示。

创建一个带有SAN扩展信息的san.inf

[Extensions]
2.5.29.17="{text}dns=mysan1.example&dns=mysan2.example"

重新签署要求

certreq -policy -config "myca.example\CA" orig-request.csr san.inf corrected-request.csr

提交更正的请求

certreq -submit -config "myca.example\CA" -attrib "CertificateTemplate:MyTemplate" corrected-request.csr

然后正常进行发行过程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.