Preguntas sobre las huellas digitales de los certificados autofirmados y la interacción cliente-servidor a través de SSL

1

Tengo algunas preguntas sobre cómo se realiza la función de huella digital.  En primer lugar, tengo algunos conocimientos sobre la criptografía. Sin embargo, parece que no es lo suficientemente bueno para comprender cientos de páginas con información vaga o incompleta.

Preguntas:

  1. Estoy intentando saber cómo comparar la huella dactilar que aparece cuando Firefox advierte sobre un certificado autofirmado, que muestra la huella dactilar en MD5 y SHA1.

    Estoy haciendo esto porque, a pesar de lo bellos y cortos que pueden parecer, las huellas dactilares realmente no son útiles en absoluto si tienes el certificado autofirmado (toda la cadena) y no la huella dactilar. Entonces, ¿cómo puede saber que la huella digital que muestra Firefox es la que coincide con la huella digital real de su certificado autofirmado?

    Por lo que me di cuenta, el archivo .crt tiene el certificado (que se muestra en base64).

    Si, por ejemplo, Export Equifax Secure CA del Administrador de certificados de Firefox, y ejecuto este comando:

    $ openssl dgst -sha1 BuiltinObjectToken-EquifaxSecureCA.crt 
    SHA1(BuiltinObjectToken-EquifaxSecureCA.crt)=**e05110ddb9bcb9e47818ea6e955cc6ba78ec6627**
    
    $ openssl dgst -md5 BuiltinObjectToken-EquifaxSecureCA.crt     
    MD5(BuiltinObjectToken-EquifaxSecureCA.crt)=**54b6604a82d90ebdb9a8a3c544bb77f1**
    

    ... se muestran las dos huellas digitales (SHA1 y MD5).

    Sin embargo, cuando desde el mismo cliente de Firefox selecciono dicho certificado y hago clic en "Ver", lo que el Administrador de certificados de Firefox muestra con estas otras dos huellas digitales:

    sha1: D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A
    
    md5: 67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4
    

    ¿Por qué son tan diferentes?

  2. Tal vez esta pregunta nos lleve a abrir otra publicación. Si ese fuera el caso, abriría una nueva publicación con eso.

    Si entendí correctamente, el Certificado es la clave pública firmada por alguien (en este caso yo mismo, y en otros casos deseados por una autoridad de certificación) y se agregan algunos otros datos funcionales y relevantes (como el nombre de dominio, correo electrónico -dirección, etc.).

    El servidor envía el Certificado al Cliente (excepto los certificados autofirmados preinstalados en el sitio del Cliente, principalmente de algún tipo de Autoridades de Certificación de los niveles más altos de la jerarquía).

    Entonces, mi pregunta. La huella digital que se muestra cuando se descarga algún certificado en el lado del cliente desde el servidor: ¿es esta huella digital el resumen de la clave pública o el resumen del certificado en sí?

  3. La configuración de algunos servidores para permitir conexiones seguras (aquellas que trabajan con SSL: https, ftps, smtps, etc.) incluyen algunas directivas en la configuración SSL para mostrar al servidor qué archivos utilizará.

    Por ejemplo, el servidor HTTPS de Apache2 podría incluir estas tres directivas:

    SSLCertificateFile - digital certificate (eg. your_domain_name.crt).
    SSLCertificateKeyFile - private key (eg. your_domain_name.key).
    SSLCertificateChainFile - intermediate (eg. DigiCertCA.crt), [OR  SSLCACertificateFile]
    

    Para saber la huella digital que mostrará Firefox cuando el usuario acceda a este servidor, en qué archivos tengo que aplicar los comandos que se muestran en la pregunta 1 y obtener las huellas digitales de? al archivo especificado en SSLCertificateFile, o en otro archivo que solo tenga la clave pública y no esté incluido aquí?

  4. Atendiendo a la pregunta anterior. Soy el administrador de ese servidor HTTPS con un certificado autofirmado, y quiero instalar el certificado en mi navegador web, evitando así que mi navegador lo descargue (y, a su vez, evite cualquier ataque de Main-In-The-Middle - alguien me da otro Certificado autofirmado), ¿qué archivo debo 'Importar' a mi navegador web? ¿Este último archivo es generado por el servidor o es directamente el archivo especificado en la directiva SSLCertificateFile?

    NOTA: Estoy haciendo esta última pregunta, porque en la directiva SSLCertificateFile , por ejemplo, puede especificar un archivo .pem , en lugar de un archivo .crt . Y el archivo .pem, como comprobé en mi propio servidor web, también podría contener la clave privada (algo que no debe enviarse al navegador web). Lo que, de hecho, nos muestra que al aplicar la huella digital al archivo .pem , el resultado sería diferente al que muestra el navegador web cuando advierte sobre un certificado autofirmado.

Gracias a todos ustedes !! y lo siento por la larga pregunta, pero he encontrado muchas páginas que hablan de la misma información, infinitas veces, y nadie tiene nada al respecto.

Creo que esto es algo extraño, ya que miles de administradores están usando herramientas criptográficas, y hay un punto importante que no discuten: las huellas dactilares. En este momento, creo que cuando ven la advertencia de un certificado autofirmado, simplemente aceptan la excepción sin verificar nada. Y creo que sí, porque no hay información que discuta este asunto específico en Internet (creo que uno importante, si no el más importante).

    
pregunta rellampec 19.07.2014 - 06:35
fuente

1 respuesta

4
  1. La huella digital de un certificado es el compendio del certificado binario, es decir, DER / ASN.1 codificado. Probablemente use la forma codificada PEM y porque openssl dgst solo usa cualquier información que ingrese será diferente. Para obtener la huella digital correcta:

    openssl x509 -in cert.crt -outform der | openssl dgst -sha1
    
  2. La huella digital del certificado se muestra en el navegador para su verificación. La huella dactilar de la clave pública se usa en otros lugares, es decir, Chrome la usa para la fijación de certificados.

  3. La huella digital que se muestra en el navegador es la del archivo SSLCertificateFile, pero nuevamente: debe convertir este archivo a DER antes de calcular la huella digital.

  4. El navegador debe conocer solo el certificado de verificación, no la clave privada. Por lo general, .pem se usa para datos codificados PEM, que no dice nada acerca de lo que hay dentro de estos datos (podrían ser múltiples certificados y claves públicas), mientras que .der se usa para datos codificados DER. Por otro lado, .crt se usa para certificados, pero no dice nada sobre el formato, pero se usa principalmente PEM. Todos los nombres de archivos son solo convenciones, al final, al servidor no le importa la extensión y puede usar el archivo que desee.

respondido por el Steffen Ullrich 19.07.2014 - 08:02
fuente

Lea otras preguntas en las etiquetas