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 opensslinstallé, 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)
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/\/.*$//'.
openssl x509 -noout -subject -nameopt multiline | grep commonNameou 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 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.
gnutls-certtoolqui 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 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.
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 à: