主题备用名称未复制到已签名证书。

19

我使用自签名的CA证书来签署其他证书。对于某些证书,我需要指定主题替代名称。我可以在请求生成期间指定它们(openssl req ...),并在.csr文件中看到它们。然后我使用CA证书对其进行签名。

openssl x509 -req -extensions x509v3_config -days 365 -in ${name}.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out ${name}.crt

和openssl.cnf文件中的下一节:

[ x509 ]
x509_extensions = x509v3_config

[ x509v3_config ]
copy_extensions = copy

但我在.crt文件中没有看到SAN。

我知道使用openssl ca ...命令的解决方案,但我没有有效的[ca]部分,也不想只是复制/粘贴它而不深入了解其含义。因此,我希望有另一种使用openssl x509 ...命令的解决方案。

5个回答

13

copy_extensions 指令只能被 openssl ca 命令理解。使用 openssl x509 命令无法从 CSR 复制扩展。

相反,您应该在 openssl x509 命令中指定您想要的确切扩展,使用与 openssl req 相同的指令。


自从OpenSSL v3以后,这个说法已经不再正确。请参考我的回答:https://stackoverflow.com/a/60656045/797243 - undefined

6

抱歉,我暂时无法发表评论。

除了@frasertweedale之外:

我使用配置文件生成了我的服务器证书。

openssl req -new -out certificate.csr -key certificate_private_key.pem -sha256 -days 1825 -config certificate.conf 

我接着做了以下的操作:

不要使用解释,而是应该在OpenSSL x509命令中明确指定你需要的确切扩展名,并使用你在OpenSSL req中使用的相同指令。

可以使用以下命令(我重新使用了相同的.conf文件):

openssl x509 -req -in certificate.csr -CA ca-root-public-certificate.pem -CAkey ca-key.pem -CAcreateserial -out certificate_public.pem -sha256 -days 1825 -extfile certificate.conf -extensions v3_req

2

在这里有一个很好的文档:证书

在创建x509证书请求时,您需要编写一个openssl配置文件,如下所示:

创建CSR

openssl req -new -key server.key -out server.csr -config csr.conf

签发证书

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000 -extensions v3_ext -extfile csr.conf

0
现在您可以使用copy_extensions标志来解决此问题。 因此,正确的使用方法是像下面给出的标志一样:
-copy_extensions=copyall

请注意,根据需求,数值可能会有所不同。

0
目前(2023年),接受的答案已不再正确,因为自OpenSSL v3以来,确实可以使用copy_extensions与openssl的x509命令。
文档:https://www.openssl.org/docs/manmaster/man1/openssl-x509.html 因此,使用OpenSSL版本3及以上,您现在可以通过类似以下方式复制您之前在签名请求中定义的扩展:
openssl x509 -req \
   -copy_extensions copyall \
   -days 365 \
   -in my.csr \
   -signkey ca.key \
   -out my.crt

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