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?
openssl
certificates
Naftuli Kay
fuente
fuente
Respuestas:
Si lo ha
openssl
instalado, puede ejecutar:fuente
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)sed
comandos 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 adicionalsed
:openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'
.openssl x509 -noout -subject -nameopt multiline | grep commonName
o solo por el valor| sed -n 's/ *commonName *= //p'
Observe que está dirigiendo el archivo a la entrada estándar a través
<
, no usándolo como argumento. Sinegrep
embargo, esto imprimirá todo el certificado, pero el CN está en elSubject:
campo cerca de la parte superior (tenga en cuenta que también hay un valor CN en elIssuer:
campo).certtool
es parte de gnutls, si no está instalado solo búscalo. GnuTLS es un poco mejor que OpenSSL, IMO.fuente
gnutls-certtool
que 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
certtool
sintaxis 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únman certtool
, por lo que el comando adecuado parece ser"d"
"mostrar". Entonces, este comando:(La extensión del archivo en mi caso simplemente
.crt
no es.pem
... esto no es relevante).... produce una salida que, en la parte relevante, se ve así:
Sin lugar a dudas, Ricitos de Oro tenía razón: la
certtool
salida es mucho más fácil, más fácil de trabajar queopenssl
en este caso.fuente
certtool
que tomara opciones sin los operadores habituales (-
o--
), yman certtool
para 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: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 blancofuente