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

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

有人能告诉我如何向现有 CSR 添加多个主题备用名称吗?

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

背景:我们遇到的问题是 HP 刀片机箱允许您生成 CSR,但它们只允许单个 SAN。我们无法使用在其他地方生成的 CSR,因为我们无法使用生成的证书,因为没有办法(我找不到)将密钥上传到刀片机箱。

我们的 CA 标准流程不允许在签名时添加 SAN。他们愿意尝试,但我正在尝试找到一个解决方案,因为这意味着我们不必依赖他们为我们提供非标准流程 - 根据我的经验,如果他们需要使用非标准流程,生活最终会变得困难。例如,当了解非标准流程的员工因休假等原因不在场时。

当前方法是通过 Web GUI 连接到 bladechassis 板载管理员并使用单个 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。

答案1

如果您的机箱不支持添加 SAN,则需要从机箱中取出密钥并使用 openssl 生成 CSR。

确保req_extensions = v3_req[ req ]部分中的注释未被注释。

将其添加subjectAltName到该[ v3_req ]部分。

生成新的 CSR。

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

您不能编辑现有的 CSR。

答案2

如果您能以某种方式获取私钥的副本,cakemox 的答案绝对是最简单的,但是如果您不能,还有另一种方法,即使用“注册代理”证书重新签署 CSR。

博客文章包含所有细节。但该过程的高层概述如下:

  • 取得招生代理证书
  • 修改 SSL 证书模板以要求颁发 EA 证书
  • 获取需要 SAN 信息的 CSR
  • 使用 EA 证书重新签署 CSR,同时添加 SAN 信息

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

创建包含 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

然后照常进行发行流程。

答案3

重要的提示: 所有这些都是推测性的,所以如果你深入研究代码,并且它与我所说的不一致,请相信代码。我不是 CA 专家,我只是在电视上扮演 CA 专家。话虽如此:

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

但就你的情况而言,你控制着(或至少与)CA。这为你提供了两个选择:

  1. 您可以指示 CA 忽略 CSR 上的签名并仍然颁发证书。
  2. 您可以让 CA 颁发与请求的证书不同的证书(例如,通过添加属性)。

其中,#1 似乎是最简单的。您需要打破 OpenSSL 上的防篡改封条才能做到这一点,但它有一些功能应该会让事情变得容易得多。我会从 asn1parse 开始,它将向您展示如何分解 CSR。

相关内容