【问题标题】:Self-signed certificate: DNSName components must begin with a letter自签名证书:DNSName 组件必须以字母开头
【发布时间】:2016-02-23 00:08:52
【问题描述】:

有没有办法让 java 的 keytool 在 SAN(主题备用名称)中生成带有通配符的自签名证书?我正在使用此命令生成密钥库:

keytool -genkey -alias tomcat -storetype JKS -keyalg RSA -keysize 2048 -ext san=dns:*.example.com -keystore "path/to/my/keystore.jks" -validity 3650

但我得到IOException: DNSName components must begin with a letter

显然,问题在于 SAN 中的 *.example.com,但我没有看到为 example.com 子域生成自签名证书的其他方法。

根据this,应该是可以的。是我的语法错误,keytool 中的错误,还是我误解了什么?

顺便说一句,我正在使用来自 JDK 1.8 update 60 的 keytool

编辑我设法通过指定CN=*.example.com 并让SAN 为空,通过keytool 为所有example.com 子域生成自签名证书。尽管如此,我仍会接受 Omikron 的答案(因为这是一个实际的答案,而不是绕过限制)。

【问题讨论】:

    标签: java certificate keytool self-signed wildcard-subdomain


    【解决方案1】:

    Keytool 在内部使用类sun.security.x509.DNSName 来检查输入。 DNSName 强制执行RFC 1034 中指定的语法。引用其 Javadoc 评论:

    名称必须采用 RFC 指定的“首选名称语法” 1034.

    首选名称语法是:

    <domain> ::= <subdomain> | " "
    <subdomain> ::= <label> | <subdomain> "." <label>
    <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
    <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
    <let-dig-hyp> ::= <let-dig> | "-"
    <let-dig> ::= <letter> | <digit>
    <letter> ::= any one of the 52 alphabetic characters A through Z in
    upper case and a through z in lower case
    <digit> ::= any one of the ten digits 0 through 9
    

    所以根据这种语法,域名必须以字母开头(A-Z,a-z)。

    较新的 RFC(例如 RFC 2181RFC 1123)正在放宽这些限制,因此这可以被视为 Java 中的错误。已经有几个相关的错误报告:

    https://bugs.openjdk.java.net/browse/JDK-8016345
    https://bugs.openjdk.java.net/browse/JDK-8007706

    所以,答案是否定的,目前无法使用 keytool 创建通配符 SAN 扩展。

    但您可以使用KeyStore Explorer 来执行此操作。它基本上是带有 GUI 的 keytool,不强制执行这些限制。


    更新:这已在 Java 15 中修复: https://bugs.openjdk.java.net/browse/JDK-8186143

    【讨论】:

    • 谢谢,我不是 SF 和那里托管的项目的忠实粉丝,所以我将首先尝试使用 OpenSSL... 作为最后的手段,我将使用 KeyStore Explorer。您的答案被标记为已接受。再次感谢您。
    • @zkristic 如果不喜欢顺丰,可以从GitHub下载:github.com/kaikramer/keystore-explorer/releases
    • @Omikron 您最终的 openjdk 错误链接实际上也是一个指向密钥库资源管理器的链接,我认为这是无意的,无意误导。
    • 是的,他们甚至在专门的博客文章中展示了修复:blogs.oracle.com/blogbypuneeth/…
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2015-04-17
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多