Ottieni il nome comune (CN) dal certificato SSL?


64

Ho un file SSL CRT in formato PEM. È possibile estrarre il nome comune (CN) dal certificato dalla riga di comando?


3
Si noti, tuttavia, che nei certificati multi-dominio, CN non li contiene tutti.
Torsten Bronger,

Risposte:


90

Se hai opensslinstallato puoi eseguire:

openssl x509 -noout -subject -in server.pem

5
Puoi estrarre la CN dall'argomento con:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Matthew Buckett il

1
Ho modificato ciò che @MatthewBuckett ha detto e usato 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.
flungo,

1
Aggiungi \*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ò)
bryn,

1
I sedcomandi 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/\/.*$//'.
Ohad Schneider,

6
Modo più semplice per separare CN da altri RDN / ATV in Nome soggetto: openssl x509 -noout -subject -nameopt multiline | grep commonNameo solo per il valore| sed -n 's/ *commonName *= //p'
dave_thompson_085

7
certtool -i < whatever.pem | egrep "^\s+Subject:"

Si noti che sta indirizzando il file verso l'input standard tramite <, non utilizzandolo come argomento. In egrepquesto 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

certtoolfa parte di gnutls, se non è installato basta cercarlo. GnuTLS è un po 'più bello di OpenSSL, IMO.


2
Buona risposta, +1. Per Mac OS X, ho dovuto usare quello gnutls-certtoolche era installato tramitebrew install gnutls
Mike D,

su installazione debiangnutls-bin
rubo77

1

Ho trovato la risposta sopra e l'ho trovata molto utile, ma ho anche scoperto che la certtoolsintassi 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 .crtnon 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' certtooloutput è molto più facile da lavorare rispetto openssla questo caso.


1
Sospetto che stiamo parlando di software completamente diversi. Non ho mai visto una versione certtoolche prendesse le opzioni senza i soliti operatori ( -o --), e man certtoolper 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:
goldilocks,

"-i, --certificate-info: stampa le informazioni sul certificato dato", mentre "-d" è "--debug". Molto strano. O_o?
Riccioli d'oro,

-1

Ho usato: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'aggiungi | sed -e 's/^[ \t]*//'Se non riesci a convivere con lo spazio bianco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.