证书中不存在主题备用名称
Subject Alternative Name not present in certificate
我生成了包含字段主题替代名称的 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 名称才能包含在内?
您可以使用:
copy_extensions = copy
在 openssl.cnf
的 CA_default
部分下。
但只有当您确定可以信任 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?
对于不喜欢在系统范围内编辑 openssl.conf
的每个人,有一个本地 openssl CLI 选项用于将 SAN 从 .csr
添加到 .crt
.您只需使用 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 文件,它看起来像这样(填写您适当的数据)并且用于通过命令 openssl req -new -key aliceprivate.key -out alice.csr -config alice-csr.conf
生成 .csr
:
[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
选项对应于文件 alice-csr.conf
中的 [v3_req]
部分,您可以在其中定义主题备用名称,也就是您想要将您的证书颁发给。
由于我一直欣赏完全可以理解的示例,其中可以重现每个步骤,因此我创建了一个示例项目,其中包含 Spring 引导微服务:https://github.com/jonashackt/spring-boot-rest-clientcertificates-docker-compose
这里很好地描述了使用替代名称签署 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 时发生的。
我生成了包含字段主题替代名称的 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 名称才能包含在内?
您可以使用:
copy_extensions = copy
在 openssl.cnf
的 CA_default
部分下。
但只有当您确定可以信任 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?
对于不喜欢在系统范围内编辑 openssl.conf
的每个人,有一个本地 openssl CLI 选项用于将 SAN 从 .csr
添加到 .crt
.您只需使用 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 文件,它看起来像这样(填写您适当的数据)并且用于通过命令 openssl req -new -key aliceprivate.key -out alice.csr -config alice-csr.conf
生成 .csr
:
[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
选项对应于文件 alice-csr.conf
中的 [v3_req]
部分,您可以在其中定义主题备用名称,也就是您想要将您的证书颁发给。
由于我一直欣赏完全可以理解的示例,其中可以重现每个步骤,因此我创建了一个示例项目,其中包含 Spring 引导微服务:https://github.com/jonashackt/spring-boot-rest-clientcertificates-docker-compose
这里很好地描述了使用替代名称签署 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 时发生的。