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

jim*_*mmy 18 ssl openssl ssl-certificate

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

openssl req -out mycsr.pem -new -key mykey.pem -days 365
Run Code Online (Sandbox Code Playgroud)

当我检查它时,它看起来像预期的新字段存在:

X509v3 Subject Alternative Name:
    DNS: my.alt.dns
Run Code Online (Sandbox Code Playgroud)

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

我使用以下命令生成它:

openssl ca -out mycert.pem -infiles mycsr.pem
Run Code Online (Sandbox Code Playgroud)

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

Han*_* Z. 15

您可以使用:

copy_extensions = copy 
Run Code Online (Sandbox Code Playgroud)

在你的CA_default部分openssl.cnf.

但只有当您确信可以信任CSR中的扩展时,如本主题所述:http://openssl.6102.n7.nabble.com/subjectAltName-removed-from-CSR-when-signing-td26928 html的

另请参阅:如何使用OpenSSL生成具有SubjectAltName的自签名证书?

  • 那么为什么没有一个功能可以将哪些扩展名列入白名单?:( (3认同)

jon*_*ckt 14

对于每个人,谁doesn't编辑的全系统openssl.conf,用于将SAN中的原生看到一只OpenSSL的CLI选项.crt.csr。您只需要使用openssl -extfile-extensionsCLI参数即可。

这是一个例子:

openssl x509 -req -days 3650 -in alice.csr -signkey aliceprivate.key -out alice.crt -extfile alice-csr.conf -extensions v3_req
Run Code Online (Sandbox Code Playgroud)

这需要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
Run Code Online (Sandbox Code Playgroud)

请记住,该-extensions v3_req选项与[v3_req]文件中的部分相对应alice-csr.conf,您可以在其中定义您要向其颁发证书的主题备用名(也称为域)。

我总是欣赏完全可理解的示例(其中每个步骤都可以重现每个步骤),因此我创建了一个具有Spring Boot微服务的示例项目:https : //github.com/jonashackt/spring-boot-rest-clientcertificates-docker-compose

  • 我不明白为什么这与我尝试过的其他20件事相比起作用了,但是确实如此..谢谢。 (2认同)
  • 非常感谢...这应该是公认的答案b / c不需要系统范围的更改(因此可以编写脚本) (2认同)
  • 这是我唯一能为我工作的事情。即使按照接受的答案中的建议更改系统 .cnf 文件也不起作用。我做了一个小改动,使其高度便携。我完全删除了 ```[alt_names]``` 部分,并用 ```subjectAltName = $ENV::SAN``` 替换了 ```subjectAltName = @alt_names```。使用此功能,您可以通过分配 SAN 环境变量来指定任何主题备用名称。 (2认同)

Pau*_*sak 6

在这里很好地描述了使用替代名称签署 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
Run Code Online (Sandbox Code Playgroud)

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