¿Obtener el nombre común (CN) del certificado SSL?


64

Tengo un archivo SSL CRT en formato PEM. ¿Hay alguna manera de extraer el nombre común (CN) del certificado desde la línea de comandos?


3
Sin embargo, tenga en cuenta que en los certificados multidominio, CN no los contiene a todos.
Torsten Bronger

Respuestas:


90

Si lo ha opensslinstalado, puede ejecutar:

openssl x509 -noout -subject -in server.pem

55
Puede extraer el CN ​​del tema con:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Matthew Buckett

1
Modifiqué lo que dijo @MatthewBuckett y solía sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'obtener solo el dominio, ya que tenía detalles adicionales después de la CN. Su juego no muy estricta para un CN válido, pero en la mayoría de los casos funciona, que podría ser más holgura y reemplazar [a-zA-Z0-9\.\-]con [^/], pero no estoy seguro de que siempre iba a funcionar.
flungo

1
Agregue \*a lo que @flungo solía admitir dominios comodín: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]funciona en mi caso, sin embargo)
bryn

1
Los sedcomandos sugeridos anteriormente no funcionarán si el certificado tiene Nombres distinguidos relativos (RDN) especificados después del Nombre común (CN), por ejemplo, OU (Unidad organizativa) o C (País). Una manera de tener en cuenta tales casos sería un adicional sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
Ohad Schneider

66
Una forma más fácil de separar CN de otros RDN / ATV en Nombre del sujeto: openssl x509 -noout -subject -nameopt multiline | grep commonNameo solo por el valor| sed -n 's/ *commonName *= //p'
dave_thompson_085

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

Observe que está dirigiendo el archivo a la entrada estándar a través <, no usándolo como argumento. Sin egrepembargo, esto imprimirá todo el certificado, pero el CN ​​está en el Subject:campo cerca de la parte superior (tenga en cuenta que también hay un valor CN en el Issuer:campo).

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

certtooles parte de gnutls, si no está instalado solo búscalo. GnuTLS es un poco mejor que OpenSSL, IMO.


2
Buena respuesta, +1. Para Mac OS X, que tenía que usar gnutls-certtoolque fue instalado a través debrew install gnutls
Mike D

en la instalación de debiangnutls-bin
rubo77

1

Encontré la respuesta anterior, y la encontré muy útil, pero también encontré que la certtoolsintaxis del comando (en Ubuntu Linux, hoy) era notablemente diferente a la descrita por Ricitos de Oro, como era el resultado. Entonces, pensé que era mejor actualizar esa excelente respuesta con lo que podría ser la "versión de hoy".

La "i"opción (¿ahora?) Significa "importar" según man certtool, por lo que el comando adecuado parece ser "d""mostrar". Entonces, este comando:

certtool d myfoo.crt

(La extensión del archivo en mi caso simplemente .crtno es .pem... esto no es relevante).

... produce una salida que, en la parte relevante, se ve así:

Common Name     : Foobar

Sin lugar a dudas, Ricitos de Oro tenía razón: la certtoolsalida es mucho más fácil, más fácil de trabajar que opensslen este caso.


1
Sospecho que estamos hablando de piezas de software completamente diferentes. Nunca he visto una versión certtoolque tomara opciones sin los operadores habituales ( -o --), y man certtoolpara la versión 3.5.8 (debian), 3.5.16 (fedora, la única versión después de eso en la rama estable ascendente es 3.5.17 de hace un mes), la documentación en línea de GnuTLS y, de hecho, la página de manual en línea para Ubuntu 17.10 (la misma versión que Debian actual) se refieren a:
goldilocks

"-i, --certificate-info: Imprime información sobre el certificado dado", mientras que "-d" es "--debug". Muy extraño. O_o?
Ricitos

-1

Solía: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'agregar | sed -e 's/^[ \t]*//'si no puedes vivir con el espacio en blanco

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.