2015-11-20 16 views
8

C'è un modo per il keytool di java per generare un certificato autofirmato con un carattere jolly in SAN (Subject Alternative Name)? Sto usando questo comando per generare chiavi:Certificato autofirmato: i componenti DNSName devono iniziare con una lettera

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

ma ho IOException: DNSName components must begin with a letter

Ovviamente, il problema è *.example.com in SAN, ma non vedo altro modo di generare certificato auto-firmato per example.com sottodomini.

Secondo this, dovrebbe essere possibile. È un errore nella mia sintassi, bug in keytool o ho frainteso qualcosa?

BTW, sto utilizzando keytool dal JDK 1.8 update 60

EDIT sono riuscito a generare certificato auto-firmato per tutti i sottodomini example.com tramite keytool specificando CN=*.example.com, e lasciando SAN vuota. Nondimeno, lascerò la risposta di Omikron come accettata (poiché è una risposta reale e non un bypass di restrizioni).

risposta

12

Keytool utilizza internamente la classe sun.security.x509.DNSName per verificare l'input. DNSName applica la sintassi specificata in RFC 1034. Citazione dalla sua commento Javadoc:

Il nome deve essere nella "Sintassi preferito nome", come specificato da RFC 1034.

La sintassi del nome preferito è:

<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 

Quindi, secondo questa sintassi, i nomi di dominio devono iniziare con una lettera (AZ, az).

RFC più recenti (ad esempio RFC 2181, RFC 1123) attenuano queste restrizioni, quindi questo può essere considerato un bug in Java. Ci sono già diverse le segnalazioni di bug correlati:

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

Quindi, la risposta è no, non esiste attualmente alcun modo per creare un jolly di estensione SAN con keytool.

Ma è possibile utilizzare KeyStore Explorer per eseguire questa operazione. Fondamentalmente è keytool con una GUI e non impone queste restrizioni.

+0

Grazie, non sono un grande fan di SF e dei progetti ospitati lì quindi proverò con OpenSSL prima ... Come ultima risorsa userò KeyStore Explorer. La tua risposta è contrassegnata come accettata. Grazie ancora. – zkristic

+1

@zkristic Se non ti piace SF, puoi scaricarlo da GitHub: https://github.com/kaikramer/keystore-explorer/releases – Omikron

+0

Molto meglio, grazie;) – zkristic

Problemi correlati