我已经生成了一个包含字段主题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名称才能包括在内?
答案 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时发生的。