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?
openssl
certificates
Naftuli Kay
la source
la source
Réponses:
Si vous avez
openssl
installé, vous pouvez exécuter:la source
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 plussed
: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'
Notez que vous dirigez le fichier vers une entrée standard via
<
, sans l’utiliser comme argument. Sansegrep
ceci, tout le certificat sera imprimé, mais le CN se trouve dans leSubject:
champ en haut (attention, il y a aussi une valeur CN dans leIssuer:
champ).certtool
fait partie de gnutls, si ce n’est pas installé, cherchez-le. GnuTLS est un peu plus agréable que OpenSSL, IMO.la source
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:(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:
Sans aucun doute, Goldilocks avait raison: il
certtool
est beaucoup plus facile de travailler avec une production queopenssl
dans ce cas.la source
certtool
prenant les options sans les opérateurs habituels (-
ou--
), etman 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 à: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 blancla source