JavaのkeytoolがSAN(Subject Alternative Name))にワイルドカードを使用して自己署名証明書を生成する方法はありますか?このコマンドを使用してキーストアを生成しています:
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 update60のkeytoolを使用しています
[〜#〜] edit [〜#〜]example.com
を指定し、=を残すことで、keytoolを介してすべてのCN=*.example.com
サブドメインの自己署名証明書を生成できました。 SAN空。それでも、Omikronの回答は受け入れられたままにしておきます(これは実際の回答であり、制限のバイパスではないため)。
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 2181 、 RFC 112 )はこれらの制限を緩和しているため、これはJavaのバグと見なすことができます。関連するバグレポートがすでにいくつかあります。
https://bugs.openjdk.Java.net/browse/JDK-8016345
https://bugs.openjdk.Java.net/browse/JDK-8007706
したがって、答えはノーです。現在、keytoolを使用してワイルドカードSAN拡張機能を作成する方法はありません。
ただし、これを行うには KeyStore Explorer を使用できます。これは基本的にGUIを備えたキーツールであり、これらの制限を強制しません。