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?
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?
Respuestas:
Si lo ha opensslinstalado, puede ejecutar:
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/'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.
\*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)
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/\/.*$//'.
openssl x509 -noout -subject -nameopt multiline | grep commonNameo solo por el valor| sed -n 's/ *commonName *= //p'
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.
gnutls-certtoolque fue instalado a través debrew install gnutls
gnutls-bin
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.
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: