TLDR: non è possibile modificare un certificato; puoi e dovresti sostituirlo .
Non è possibile modificare nulla all'interno di un certificato perché è firmato digitalmente per impedire a chiunque di modificare qualsiasi cosa al suo interno. Tuttavia, puoi ottenere un nuovo certificato per la stessa coppia di chiavi, ma con nuove date, nomi diversi e forse altre modifiche.
Nessuna CA reale emette un certificato con il proprietario (che in realtà è Soggetto) o l'emittente che contiene solo 'sconosciuto', molto meno entrambi, quindi questo è quasi certamente il certificato autofirmato fittizio (segnaposto) creato da keytool
quando genera una coppia di chiavi.
Se vuoi ottenere un certificato "vero" da un'autorità di certificazione affidabile e affidabile, ovvero CA, puoi farlo con keytool
; infatti questo è il processo normale :
-
keytool -genkeypair
: crea keypair e cert auto (nel keystore)
-
keytool -certreq
: crea Cert Signing Request aka CSR (per keypair in keystore)
- invia CSR a CA insieme a prove di identità (spesso, in particolare per server SSL / TLS, un nome di dominio Internet, ma a volte un altro tipo di identità) e, se applicabile, il pagamento
- riceve / recupera un nuovo certificato dalla CA insieme a tutti i certificati "catena" o "intermedia"
-
keytool -importcert
: installa il nuovo certificato e catena nel keystore
Vedi il manuale Java ad es. link . I dettagli dei passaggi 3 e 4 variano a seconda della CA che utilizzi e tutte le CA che ho mai visto hanno istruzioni personalizzate per l'emissione di un certificato in un sistema Java, spesso elencate in Tomcat come sistema Java "tipico", adattato a tale CIRCA. Hai effettivamente eseguito il passaggio 1 ma con il nome soggetto errato e devi completare i passaggi rimanenti con una variante:
- nel passaggio 2
keytool -certreq
aggiungi l'opzione -dname 'newnamefields'
(usa "
su Windows) per specificare il richiedente / il nome soggetto corretto per il CSR.
Informazioni generali sui nomi dei certificati si trovano nella stessa pagina alla voce X.500 nomi distinti . Se questa cert (e chiave) sarà per un server SSL / TLS, il nome soggetto dovrebbe essere o includere 'CN=servername'
dove servername
non è il nome di una persona come descritto nel manuale, ma invece il nome, o un carattere jolly (solo nel primo componente) che corrisponde al nome, del server quando è accessibile dai client . Per i server pubblici / Internet, di solito è un nome di dominio completo (FQDN) o in alcuni casi un indirizzo IP, ma alcuni ambienti Intranet o LAN utilizzano altri nomi.
Altrimenti: se vuoi creare un nuovo certificato autofirmato, keytool
non ha un'opzione per quello; puoi scrivere un programma per farlo, ma è più facile, anche se un po 'rotondeggiante, utilizzare OpenSSL . È inoltre possibile utilizzare OpenSSL per richiedere un certificato CA reale con alcune opzioni che keytool
non supporta. Se sei su Linux probabilmente hai già OpenSSL; su altri Unix potrebbe essere necessario installarlo, quasi sempre dal normale repository / canale / etc del venditore; su Windows (a meno che Windows 10 con WSL) è necessario installare il pacchetto ShiningLight . Di profilo questo è:
-
keytool -importkeystore -srckeystore jksfile -destkeystore tempp12 -deststoretype pkcs12 # convert from Java-only JKS to standardized PKCS12
-
openssl pkcs12 -in tempp12 -nocerts -out tempkey # convert from PKCS12 to OpenSSL's 'private' PEM format
-
per autofirmato: openssl req -new -x509 -inkey tempkey -validity days -out newcert
e prompt di risposta per il nome (oppure specificare -subj 'namefields'
); vedi man req
su Unix per i dettagli, o sul web o versione precedente se applicabile . Quindi keytool -importcert -file newcert -keystore jksfile [-alias entry_if_not_mykey]
-
Per firma CA: modificare il file di configurazione OpenSSL (o una copia) se necessario, quindi openssl req -new [-config conffile] -inkey tempkey [-subj 'namefields'] -out csrfile
, quindi inviare questo CSR a una CA nello stesso modo utilizzato per Java sopra. Quando ottieni un nuovo certificato e la sua catena, fai uno di quanto segue:
4a. keytool -importcert
dei certificati di catena necessari a una voce diversa o a voci diverse singolarmente dall'alto verso il basso, quindi il certificato EE alla stessa voce, come descritto per Java
4b. combinare il certificato EE e i relativi certificati di catena, tutti in PEM, in un singolo file e keytool -importcert
l'intera catena alla stessa voce
4c. usa openssl pkcs12 -export
per combinare tempkey
più il (nuovo) certificato e catena in un singolo file diciamo newp12
, per man pkcs12
o qui o prima , quindi keytool -importkeystore -srckeystore newp12 -srcstoretype pkcs12 -destkeystore jksfile
dopo aver eliminato la vecchia voce, o semplicemente cancellando il file se questa è solo la voce (desiderata)