ver todos los certificados en un archivo de certificado PEM (cadena de certificado completa) con openssl u otro comando

ver todos los certificados en un archivo de certificado PEM (cadena de certificado completa) con openssl u otro comando

A menudo, los archivos de certificado (en formato PEM) contienen varios certificados como:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----

con el comando: openssl x509 -in cert.pem -noout -textpuedo ver la primera entrada.

¿Existe alguna forma integrada de mostrar la segunda entrada o todas las entradas?

¿Existe alguna forma sencilla de ver todas las entradas?

Lo que realmente me interesa son: C, ST, O, OU, CN, del sujeto, el emisor y las fechas de validez del sujeto.

Respuesta1

El cargo ¿Cómo ver todos los certificados SSL de un paquete? sugiere varias posibilidades:

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout (gives shorter output)
keytool -printcert -v -file <certs.crt>

La publicación contiene más variaciones al usar Perl, bash, awk y otras utilidades.

Respuesta2

Yo sugeriría una herramienta que no sea OpenSSL: otra pila TLS popular, GnuTLS, tiene un certtoolprograma similar que produce resultados en el mismo formato.

certtool -i < multiplecerts.pem

(Se diferencian en algunos pequeños detalles, como la decodificación de extensiones de certificado menos comunes).

Respuesta3

Sé que esto es antiguo, pero encontré mi camino aquí buscando obtener el asunto, las fechas de validez y el emisor de una cadena de certificados en formato pem que contenía bastantes líneas comentadas.

Entonces, en RHEL7 ejecutando bash 4.2.46, esta es la solución que elegí después de leer detenidamente la documentación de sed en GNU.org:técnicas sed multilínea

for CULPRIT in $(sed -n '/^-----BEGIN.*CERTIFICATE-----/{n;p}' CHAIN-FILE-NAME); do
VICTIM="$(printf "${CULPRIT}" | sed -e 's,\/,\\\/,g')"
sed -e '/./{H;$!d;}' -e 'x;/'"${VICTIM}"'/!d' CHAIN-FILE-NAME | openssl x509 -subject -dates -issuer -noout
done

información relacionada