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

时间:2017-08-08 17:31:21

标签: 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名称中包含通配符。有谁知道我是否可以使用一些技巧(!)来做到这一点?

1 个答案:

答案 0 :(得分:2)

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

编辑:这是我所做的博士

有一个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