%20con%20openssl%20u%20otro%20comando.png)
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 -text
puedo 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 certtool
programa 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