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

标签 java x509certificate keytool

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

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

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

最佳答案

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

编辑:这是我所做的 tl;dr

有一个看起来像这样的 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

的证书

现在您已基本完成,但棘手的部分是您现在需要将证书 key 对转换为 PKCS12 keystore ,然后再尝试导入 JKS keystore 。

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

关于java - Java Keytool 是否允许 SAN 值具有通配符 DNS 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574633/

相关文章:

java - 创建证书时 IP 地址作为主机名 (CN)? (HTTPS 主机名错误 : should be <ipAddress>)

java - 无法让 ACRA 接受自签名证书

java - 调用 mediaplayer.stop() 后,我无法再次开始播放声音。为我解释开发引用?

java - 仅针对一台特定服务器忽略 SSLHandshakeException

docker - kube-apiserver docker持续重启

apache - 太阳.security.provider.certpath.SunCertPathBuilderException : unable to find valid certification path to requested target

java - 如何将 "stringWithFormat"转换为 Java?

java - 由于新线程中的 Java 环境变量而导致的错误

c# - 如何在 C# 中为 DSA key 对创建带有自签名证书的 PKCS12 p12 文件?

ssl - 无法在 JKS 中找到私钥的详细信息