证书签名请求中的主题备用名称显然无法在签名中幸存

信息安全 openssl x.509
2021-08-18 19:32:34

因此,我已经能够按照先前(出色)答案subjectAltName=IP:1.2.3.4中的配方创建具有表单主题备用名称的证书签名请求。

当我检查该 CSR 时,openssl req -in key.csr -text我可以看到相应的部分:

Requested Extensions:
  X509v3 Subject Alternative Name: 
    IP Address:1.2.3.4

然后我继续使用自签名密钥签署 CSR,如下所示:

openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial \
  -in key.csr -out key.crt

生成的证书(使用 进行检查时openssl x509 -in key.crt -text)不再标识该部分。

这只是显示参数的产物还是需要我还指示openssl x509它在进行签名时应该包括扩展名(如果是,如何)?

我在 macOS High Sierra (openssl version报告LibreSSL 2.2.7) 上使用 OpenSSL,并且没有更改其默认配置。这些密钥最终将在 Debian(Stretch)服务器之间使用,因此如果在这种情况下有帮助,我可以在那里执行密钥生成。

2个回答

以下命令显然解决了这个问题:

openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial \
  -extensions SAN \
  -extfile <(cat /etc/ssl/openssl.cnf \
    <(printf "\n[SAN]\nsubjectAltName=IP:1.2.3.4")) \
  -in key.csr -out key.crt

与 for 的配方相同openssl req,但使用两个参数extensionsandextfile而不是reqextsand config

此命令有助于通过打印相关部分来快速确认所需的结果:

openssl x509 -in key.crt -text | grep "Subject Alternative Name" -C 1

通过执行以下操作,我设法将 SAN 放入 CSR,然后在不丢失它们的情况下对其进行签名。

找到 openssl.cnf

在 Ubuntu 中

/etc/ssl/openssl.cnf

中央操作系统

/etc/pki/tls/openssl.cnf

[ CA_default ]并在该部分下取消注释以下内容

copy_extensions = copy

然后你必须创建一些文件(如果你不知道在哪里,尝试颁发第一个证书,错误信息会告诉你在哪里)

sudo mkdir /your/dedicated-ca/dir/newcerts
sudo touch /your/dedicated-ca/dir/serial
sudo echo 1000 > /etc/pki/CA/serial

如果您想通过主题 sudo echo unique_subject = no >> /etc/pki/CA/index.txt.attr 获得重复的证书

现在尝试颁发证书,但不使用openssl x509,但是openssl ca

   sudo openssl ca -cert /your/ca/certfile.crt -keyfile /your/ca/certfile.key -in yourweb.csr -out yourweb.crt

对我来说就像一个魅力。