Obtenir le nom commun (CN) du certificat SSL?

64

J'ai un fichier SSL CRT au format PEM. Est-il possible d'extraire le nom commun (CN) du certificat à partir de la ligne de commande?

Naftuli Kay
la source
3
Notez cependant que dans les certificats multi-domaines, CN ne les contient pas tous.
Torsten Bronger

Réponses:

90

Si vous avez opensslinstallé, vous pouvez exécuter:

openssl x509 -noout -subject -in server.pem
Jeff Smith
la source
5
Vous pouvez extraire le CN du sujet avec:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Matthew Buckett
1
J'ai modifié ce que @MatthewBuckett avait dit et utilisé sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'pour obtenir uniquement le domaine, car j'avais des détails supplémentaires après le CN. Ce n'est pas une correspondance très stricte pour un CN valide, mais dans la plupart des cas, cela fonctionne, vous pouvez être plus mou et remplacer [a-zA-Z0-9\.\-]par, [^/]mais je ne suis pas sûr que cela fonctionne toujours.
flungo
1
Ajoutez \*à ce que @flungo supportait les domaines génériques: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]fonctionne dans mon cas, cependant)
bryn
1
Les sedcommandes suggérées ci-dessus ne fonctionneront pas si le certificat a des noms distinctifs relatifs spécifiés après le nom commun (CN), par exemple OU (OrganizationalUnit) ou C (Pays). Une façon de répondre à de tels cas serait un plus sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
Ohad Schneider
6
Un moyen plus facile de séparer le CN des autres RDN / VTT dans Nom du sujet: openssl x509 -noout -subject -nameopt multiline | grep commonNameou pour la valeur uniquement| sed -n 's/ *commonName *= //p'
dave_thompson_085 22/03/17
7
certtool -i < whatever.pem | egrep "^\s+Subject:"

Notez que vous dirigez le fichier vers une entrée standard via <, sans l’utiliser comme argument. Sans egrepceci, tout le certificat sera imprimé, mais le CN se trouve dans le Subject:champ en haut (attention, il y a aussi une valeur CN dans le Issuer:champ).

X.509 Certificate Information:
    Version: 3
    Serial Number (hex): 01
    Issuer: [...] CN=unixandlinux.ex  <- Not this one.
    Validity: ...
    Subject: CN=goldilocks

certtoolfait partie de gnutls, si ce n’est pas installé, cherchez-le. GnuTLS est un peu plus agréable que OpenSSL, IMO.

boucle d'or
la source
2
Bonne réponse, +1. Pour Mac OS X, je devais utiliser la version gnutls-certtoolqui a été installée viabrew install gnutls
Mike D le
sur l’installation de debiangnutls-bin
rubo77
1

J'ai trouvé la réponse ci-dessus et la trouvais très utile, mais j'ai aussi constaté que la certtoolsyntaxe de commande (sur Ubuntu Linux aujourd'hui) était sensiblement différente de celle décrite par goldilocks, de même que la sortie. J'ai donc pensé qu'il valait mieux mettre à jour cette excellente réponse avec ce qui pourrait être "la version d'aujourd'hui".

L' "i"option (maintenant?) Signifie "importer" man certtool, ce qui signifie que la commande appropriée semble être "d""afficher". Donc, cette commande:

certtool d myfoo.crt

(L'extension de fichier dans mon cas n'est tout simplement .crtpas .pem... ce n'est pas pertinent.)

... produit une sortie qui, dans la partie pertinente, ressemble à ceci:

Common Name     : Foobar

Sans aucun doute, Goldilocks avait raison: il certtoolest beaucoup plus facile de travailler avec une production que openssldans ce cas.

Mike Robinson
la source
1
Je suppose que nous parlons de logiciels complètement différents. Je n'ai jamais vu de version certtoolprenant les options sans les opérateurs habituels ( -ou --), et man certtoolpour les versions 3.5.8 (debian), 3.5.16 (fedora, la seule version après celle de la branche stable en amont est la version 3.5.17 à partir de il y a un mois), la documentation en ligne de GnuTLS et, en fait, la page de manuel en ligne d'Ubuntu 17.10 (version identique à celle de Debian actuelle) font référence à:
goldilocks le
"-i, --certificate-info: Affiche des informations sur le certificat donné", alors que "-d" est "--debug". Très étrange. O_o?
goldilocks
-1

J'ai utilisé: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'ajouter | sed -e 's/^[ \t]*//'Si vous ne pouvez pas vivre avec l'espace blanc

Djieno
la source