2015-11-20 20 views
8

Gibt es eine Möglichkeit, dass java keytool ein selbstsigniertes Zertifikat mit einem Platzhalter in SAN (Subject Alternative Name) generiert? Ich bin mit diesem Befehl Schlüsselspeicher zu generieren:Selbstsigniertes Zertifikat: DNSName-Komponenten müssen mit einem Buchstaben beginnen

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

Aber ich bekomme IOException: DNSName components must begin with a letter

Offensichtlich ist das Problem *.example.com in SAN, aber ich sehe nicht, andere Art und Weise selbst signiertes Zertifikat zu generieren für example.com Subdomänen.

Nach this sollte es möglich sein. Ist es Fehler in meiner Syntax, Fehler in Keytool, oder habe ich etwas falsch verstanden?

BTW, ich bin mit keytool von JDK 1.8 Update 60

EDIT konnte ich selbst signiertes Zertifikat für alle example.com Subdomains über keytool erzeugen, indem CN=*.example.com Angabe und verlassen SAN leer. Nichtsdestoweniger werde ich die Antwort von Omikron als akzeptiert akzeptieren (da es eine tatsächliche Antwort und keine Umgehung von Einschränkungen ist).

Antwort

12

Keytool intern verwendet die Klasse sun.security.x509.DNSName, um den Eingang zu überprüfen. DNSName erzwingt die in RFC 1034 angegebene Syntax. Zitat von seinem Javadoc-Kommentar:

Der Name in dem sein muss "bevorzugte Name Syntax", wie 1034.

Der bevorzugte Name Syntax ist durch RFC:

<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 

Nach dieser Syntax müssen Domainnamen mit einem Buchstaben beginnen (AZ, az).

Neuere RFCs (z. B. RFC 2181, RFC 1123) lockern diese Einschränkungen, sodass dies als Fehler in Java betrachtet werden kann. Es gibt bereits mehrere ähnliche Fehlerberichte:

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

So ist die Antwort nein, gibt es derzeit keine Möglichkeit, eine Wildcard SAN-Erweiterung mit keytool zu erstellen.

Aber Sie könnten KeyStore Explorer verwenden, um dies zu tun. Es ist im Grunde Keytool mit einer GUI und erzwingt diese Einschränkungen nicht.

+0

Danke, ich bin kein großer Fan von SF und Projekten, die dort gehostet werden, also werde ich zuerst mit OpenSSL versuchen ... Als letzten Ausweg werde ich KeyStore Explorer verwenden. Ihre Antwort wird als akzeptiert markiert. Nochmals vielen Dank. – zkristic

+1

@zkristic Wenn Sie SF nicht mögen, können Sie es von GitHub herunterladen: https://github.com/kaikramer/keystore-explorer/releases – Omikron

+0

Viel besser, danke;) – zkristic