Ho un file SSL CRT in formato PEM. È possibile estrarre il nome comune (CN) dal certificato dalla riga di comando?
Ho un file SSL CRT in formato PEM. È possibile estrarre il nome comune (CN) dal certificato dalla riga di comando?
Risposte:
Se hai openssl
installato puoi eseguire:
openssl x509 -noout -subject -in server.pem
openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'
per ottenere solo il dominio dato che avevo ulteriori dettagli dopo la CN. Non è un abbinamento super rigoroso per una CN valida ma nella maggior parte dei casi funziona, potresti essere più lento e sostituirlo [a-zA-Z0-9\.\-]
con [^/]
ma non sono sicuro che funzionerebbe sempre.
\*
a ciò che @flungo utilizzava per supportare i domini jolly: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/'
( [^/]
funziona nel mio caso, però)
sed
comandi suggeriti sopra non funzioneranno se il certificato ha nomi distinti relativi (RDN) specificati dopo il nome comune (CN), ad esempio OU (OrganizationalUnit) o C (Country). Un modo per soddisfare per questi casi sarebbe un ulteriore sed
: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'
.
openssl x509 -noout -subject -nameopt multiline | grep commonName
o solo per il valore| sed -n 's/ *commonName *= //p'
certtool -i < whatever.pem | egrep "^\s+Subject:"
Si noti che sta indirizzando il file verso l'input standard tramite <
, non utilizzandolo come argomento. In egrep
questo modo verrà stampato l'intero certificato, ma la CN si trova nel Subject:
campo vicino alla cima (attenzione c'è anche un valore CN nel Issuer:
campo).
X.509 Certificate Information:
Version: 3
Serial Number (hex): 01
Issuer: [...] CN=unixandlinux.ex <- Not this one.
Validity: ...
Subject: CN=goldilocks
certtool
fa parte di gnutls, se non è installato basta cercarlo. GnuTLS è un po 'più bello di OpenSSL, IMO.
gnutls-certtool
che era installato tramitebrew install gnutls
gnutls-bin
Ho trovato la risposta sopra e l'ho trovata molto utile, ma ho anche scoperto che la certtool
sintassi del comando (su Ubuntu Linux, oggi) era notevolmente diversa da quella descritta dai goldilock, così come l'output. Quindi, ho pensato che fosse meglio aggiornare quella risposta eccellente con quella che potrebbe essere la "versione di oggi".
L' "i"
opzione (ora?) Sta per "import", in base a man certtool
, quindi il comando corretto sembra essere "d"
"display". Quindi, questo comando:
certtool d myfoo.crt
(L'estensione del file nel mio caso sembra .crt
non essere .pem
... questo non è rilevante.)
... produce output che, nella parte pertinente, è simile al seguente:
Common Name : Foobar
Senza dubbio, i riccioli d'oro avevano ragione: l' certtool
output è molto più facile da lavorare rispetto openssl
a questo caso.
certtool
che prendesse le opzioni senza i soliti operatori ( -
o --
), e man certtool
per v. 3.5.8 (debian), 3.5.16 (fedora, l'unica versione successiva nel ramo stabile a monte è 3.5.17 da un mese fa), la documentazione online di GnuTLS e, in effetti, la pagina man online di Ubuntu 17.10 (stessa versione dell'attuale debian) si riferiscono tutti a: