Java Keytool 是否允许 SAN 值具有通配符的 DNS 名称?



根据 RFC 2818(第 3.1 节(RFC 2459 - 似乎允许将 DNS 名称条目列表作为 SAN 名称的一部分并涵盖多个域:

SubjectAlternativeName [
DNSName: localhost
DNSName: *.i.mydomain.net
DNSName: *.mydomain.net
]

使用 Javakeytool应用程序 - 它似乎不允许 SAN 条目在 DNS 名称中包含通配符。有谁知道我是否可以使用一些技巧(!(来做到这一点?

我过去遇到过这个问题,并通过使用 OpenSSL 生成 CSR 并且仅在必要时使用 keytool(导入和导出证书和密钥(来解决它。

编辑:这是tl;博士我做了什么

有一个看起来像这样的req.cfg文件:

[req]
req_extensions = v3_req
[v3_req]
subjectAltName = @san
[san]
DNS.1 = *.mydomain.com
DNS.2 = mydomain.com

然后运行以下命令:

$ openssl req -new -newkey rsa:2048 -sha256 -nodes -out keypair.csr -keyout keypair.key -config req.cfg

现在您已经有了证书签名请求和私钥,您可以将 CSR 发送到 CA 或使用 OpenSSL 使用刚刚生成的keypair.csr对证书进行自签名。无论您如何执行此操作,假设您获得的证书将我们称为mycert.crt

您现在几乎完成了,但棘手的部分是,您现在需要在尝试导入 JKS 密钥库之前将证书密钥对转换为 PKCS12 密钥库。

openssl pkcs12 -export -name mycertname -in mycert.crt -inkey keypair.key -out keystore.p12
keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias mycertname

最新更新