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?
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?
Réponses:
Si vous avez openssl
installé, vous pouvez exécuter:
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/'
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.
\*
à ce que @flungo supportait les domaines génériques: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/'
( [^/]
fonctionne dans mon cas, cependant)
sed
commandes 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/\/.*$//'
.
openssl x509 -noout -subject -nameopt multiline | grep commonName
ou pour la valeur uniquement| sed -n 's/ *commonName *= //p'
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 egrep
ceci, 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
certtool
fait partie de gnutls, si ce n’est pas installé, cherchez-le. GnuTLS est un peu plus agréable que OpenSSL, IMO.
gnutls-certtool
qui a été installée viabrew install gnutls
gnutls-bin
J'ai trouvé la réponse ci-dessus et la trouvais très utile, mais j'ai aussi constaté que la certtool
syntaxe 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 .crt
pas .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 certtool
est beaucoup plus facile de travailler avec une production que openssl
dans ce cas.
certtool
prenant les options sans les opérateurs habituels ( -
ou --
), et man certtool
pour 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 à: