Tengo un paquete de certificados .crt archivo.
haciendo openssl x509 -in bundle.crt -text -noout
solo muestra el certificado raíz.
¿Cómo veo todos los demás certificados?
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 sugiere esta frase:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
De hecho funcionó para mí, pero no entiendo los detalles, así que no puedo decir si hay alguna advertencia.
/etc/ssl/certs/ca-certificates.crt
y conseguíunable to load PKCS7 object
Java
keytool
hace el truco:Anotación: el doble clic de Windows no funciona. Windows solo lee el primer certificado en el almacén de claves y extiende automáticamente la cadena de confianza desde su almacén de certificados incorporado.
Resultados:
.crt
archivo no se muestra.crt
archivo. Esto puede llevar a conclusiones erróneas.fuente
Siguiendo este FAQ me llevó a este script Perl , lo que sugiere muy fuertemente a mí que
openssl
no tiene soporte nativo para el manejo de la n º certificado en un paquete, y que en lugar debemos usar alguna herramienta para cortar-y-dados de la entrada antes de alimentar a cada uno certificado aopenssl
. Este guión perl, adaptado libremente del guión de Nick Burch vinculado anteriormente, parece hacer el trabajo:fuente
Oneliner que muestra un resumen de cada certificado en el archivo.
(Comando similar mencionado en otra respuesta, pero esto da una salida más corta, sin la opción --text).
ejemplo:
fuente
Puede que esto no sea bonito o elegante, pero fue rápido y funcionó para mí usando bash en linux y bloques formateados PEM en un archivo de paquete ca-cert.
Puede ponerlo todo en una línea y ajustar las opciones de openssl para adaptarlas. Realmente desearía que hubiera una solución más elegante para esto, pero en este caso creo que encontrar la solución más elegante habría llevado más tiempo que hackear la poco elegante.
fuente
Como no hay una solución basada en awk:
El primer comando divide el paquete en certs buscando BEGIN y END lines. El segundo comando recorre los certificados extraídos y los muestra.
fuente
En bash, generalmente solo se necesita una línea (larga) de código :-)
fuente
Pequeña modificación en la publicación de MadHatter para permitirle copiar / pegar directamente a la CLI. También incluí el hash MD5, que es útil para asegurarme de que los certificados sean correctos. La línea estándar devuelta es el hash md5 de los certificados.
Si desea ver una salida breve y concisa, utilice esta versión. Es útil si solo está verificando que ha incluido todos sus certificados, pero realmente no está verificando el uso / etc de los certificados.
En caso de que su versión de openssl no sea compatible con todos esos indicadores, aquí hay algunos egrep que puede usar. Lo mismo que el primero pero solo pipa a egrep.
Para verificar el hash MD5 de la clave privada, puede hacer lo siguiente.
Referencia: SSL Shopper - Certificado Key Matcher
fuente
Aquí hay una solución basada en awk que no se basa en archivos intermedios.
Funciona leyendo bloques PEM de stdin y concatenando cada bloque en una sola línea codificada en base64. Las líneas se leen, decodifican y pasan a openssl como certificados codificados DER.
fuente
cat bundle.crt | awk -v cmd="openssl x509 -subject -noout" '/-----BEGIN/ { c = $0; next } c { c = c "\n" $0 } /-----END/ { print c|cmd; close(cmd); c = 0 }'
.Me gustaría agregar la línea de comandos perl idiomática aquí:
Si hay texto, entonces un ajuste un poco más robusto:
Simplemente cambie el valor de lo que n debería estar en la segunda declaración para obtener el enésimo certificado.
fuente
Método de Windows
Una forma de ver toda la cadena es (en Windows, por supuesto) hacer doble clic en el CRT y luego buscar en la pestaña Ruta de certificación. Mostrará toda la cadena incluso si solo hay un Certificado intermedio o de raíz. Ver captura de pantalla a continuación para más detalles. Si no está en Windows, me disculpo por mi falta de conocimiento con las variantes de Unix / Linux.
Nota: esto puede causar resultados falsos si el certificado intermedio está en su almacén de claves local. Windows lo agregará automáticamente y no mostrará solo lo que estaba en el paquete.
Linux (Método Ubuntu)
Pasé por alto tu comando inicial y tienes una cosa fuera de lugar. Su comando debería verse así:
Fuente: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
fuente
openssl
invocación dio un error de sintaxis, sino que solo enumeró el primer certificado del paquete. En segundo lugar, las dos invocaciones son funcionalmente idénticas. En tercer lugar, y probablemente lo más importante, el tuyo tampoco funciona, al menos para mí; también enumera solo el primer certificado del paquete.