主题备选名称不存在于证书中

时间:2015-06-22 10:09:50

标签: ssl openssl ssl-certificate

我已经生成了一个包含字段主题alt名称的CSR:

openssl req -out mycsr.pem -new -key mykey.pem -days 365

当我检查它时,它看起来与预期的新字段一样:

X509v3 Subject Alternative Name:
    DNS: my.alt.dns

但是,当我使用它来签署证书时,由于某种原因省略了该字段。

我使用以下命令生成它:

openssl ca -out mycert.pem -infiles mycsr.pem

我的CA证书是否必须包含相同的Alt名称才能包括在内?

3 个答案:

答案 0 :(得分:13)

您可以使用:

copy_extensions = copy 

CA_default。{/ p>的openssl.cnf部分下方

但只有当您确定可以信任此线程中指出的CSR中的扩展时:http://openssl.6102.n7.nabble.com/subjectAltName-removed-from-CSR-when-signing-td26928.html

另请参阅:How can I generate a self-signed certificate with SubjectAltName using OpenSSL?

答案 1 :(得分:5)

对于不喜欢编辑系统范围openssl.conf的每个人,都有一个本机openssl CLI选项,用于将.crt中的SAN添加到.csr。您只需要使用openssl的-extfile-extensions CLI参数。

以下是一个例子:

openssl x509 -req -days 3650 -in alice.csr -signkey aliceprivate.key -out alice.crt -extfile alice-csr.conf -extensions v3_req

这需要一个alice-csr.conf文件,它看起来像这样(填写适当的数据),用于使用命令.csr生成openssl req -new -key aliceprivate.key -out alice.csr -config alice-csr.conf

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = DE
ST = Thuringia
L = Erfurt
O = Alice Corp
OU = Team Foo
CN = server-alice

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = server-alice
DNS.2 = localhost

请注意,-extensions v3_req选项对应于文件[v3_req]中的alice-csr.conf部分,您可以在其中定义主题备用名称,即域名,您要发布证书到。

由于我总是欣赏完全可理解的示例,我可以重现每一步,我创建了一个以Spring Boot微服务为特色的示例项目:https://github.com/jonashackt/spring-boot-rest-clientcertificates-docker-compose

答案 2 :(得分:5)

在这里很好地描述了使用替代名称签署CSR:https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html#creating-certificates-valid-for-multiple-hostnames

简而言之,您将创建一个仅包含替代名称的something.ext文件:

subjectAltName = DNS:*.my.alt.dns, DNS:my.alt.dns

,然后在openssl x509 -req ...命令-extfile something.ext中引用此文件。请注意,它是在签署CSR时发生的,而不是在准备CSR时发生的。