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
opensslinstalado, 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)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 adicionalsed: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'Observe que está dirigiendo el archivo a la entrada estándar a través
<, no usándolo como argumento. Sinegrepembargo, 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).certtooles parte de gnutls, si no está instalado solo búscalo. GnuTLS es un poco mejor que OpenSSL, IMO.fuente
gnutls-certtoolque fue instalado a través debrew install gnutlsgnutls-binEncontré 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únman certtool, por lo que el comando adecuado parece ser"d""mostrar". Entonces, este comando:(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í:
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 queopensslen este caso.fuente
certtoolque tomara opciones sin los operadores habituales (-o--), yman 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: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