Certificado digital “Firma y huella digital”

2

¿Cuál es la diferencia entre la firma del certificado digital y la huella digital (huella digital)?

Sé que Firma: La firma real para verificar que proviene del emisor. y huella digital (huella digital): el hash en sí, utilizado como forma abreviada del certificado de clave pública.

¿Pero qué hay exactamente dentro de ambos?

Ambos son valores hash pero con ¿qué autoridad de certificación de parámetros lo creó ?

    
pregunta Johan Gelp 29.11.2013 - 17:32
fuente

2 respuestas

6

Aquí está la cita relevante de RFC 5280 .

  

El campo signatureValue contiene una firma digital calculada en      el ASN.1 DER codificado tbsCertificate. El ASN.1 DER codificado      tbsCertificate se utiliza como entrada para la función de firma. Esta      el valor de la firma se codifica como BIT STRING y se incluye en el      campo de firma Los detalles de este proceso se especifican para cada uno.      de los algoritmos enumerados en [RFC3279], [RFC4055] y [RFC4491].

     

Al generar esta firma, una CA certifica la validez de la      Información en el campo tbsCertificate. En particular, la CA      Certifica la vinculación entre el material de clave pública y el sujeto.      del certificado.

Básicamente, la firma del certificado es un valor firmado por CA de la información codificada en el certificado, que incluye elementos como el sujeto, el emisor y la clave pública del certificado. El proceso de validación de las firmas se describe en varias RFC como se mencionó.

La huella digital del certificado es simplemente un valor de hash sha1 y sha256 calculado en todo el certificado.

    
respondido por el Ayrx 29.11.2013 - 18:12
fuente
1

Muestra práctica

Obtención de un certificado para jugar con

Usando los comandos openssl de bajo nivel:

mkdir /tmp/ssltests
cd $_

openssl s_client -connect www.google.com:443 -ign_eof \
    <<<$'HEAD / HTTP/1.0\r\n\r' 2>/dev/null |
  sed -ne '/^Server certificate/,${
    /-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{
      //{/END/{p;q}};p}}' >www.google.com.crt

Tal vez no sea la forma más sencilla, pero entre man openssl y man sed , he elegido ...

Para que pueda ver qué es un certificado SSL :

cat www.google.com.crt 
-----BEGIN CERTIFICATE-----
MIIEdjCCA16gAwIBAgIIRYUpUVjSfHQwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
BhMC                        ...                            AVzv0
OtGjXuOdSfB4nURA7INNYvx8ULMECg5Sj8Gan8kIOfeW3jt9vdxsZrbn0Cu/bcTm
OEK3nH1sBk2Hy5ZBcyludHyUzqTHsXSjnIjwZNPpihVmFrs5I1Ma7iEj
-----END CERTIFICATE-----

sed '1d;$d' www.google.com.crt | tr -d \n | wc -c
1528
echo $(( 1528 * 6 ))
9168
echo $(( 9168 / 8 ))
1146

Hay un montón de 9168 bits (o 1146 bytes), que contienen muchos detalles:

En el contenido del certificado

El certificado

A x509 contiene una gran cantidad de información como asunto, emisor, fechas válidas, otros certificados firmados ...

Podrías recuperar información específica mediante:

openssl x509 -in www.google.com.crt -noout -subject
subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com

o

openssl x509 -in www.google.com.crt -noout -issuer 
issuer= /C=US/O=Google Inc/CN=Google Internet Authority G2

o bien:

openssl x509 -in www.google.com.crt -noout -text

volcará todos los detalles, incluida la clave pública, los algoritmos de firma ...

Huellas digitales

Son como md5sum para validar un archivo: para verificar (por ejemplo: por teléfono), podría usar un tipo de huella digital.

¡Las huellas digitales ya no contienen información legible! Es solo checksum !!

openssl x509 -in www.google.com.crt -noout -fingerprint
SHA1 Fingerprint=03:30:78:7E:9B:7E:11:4E:66:2E:77:ED:AC:99:71:09:F8:E5:F0:6F

openssl x509 -in www.google.com.crt -noout -md5 -fingerprint
MD5 Fingerprint=5A:4C:B2:35:C4:F2:2E:3A:72:6A:49:F6:BC:EA:5B:20

openssl x509 -in www.google.com.crt -noout -sha256 -fingerprint
SHA256 Fingerprint=E8:55:E1:CC:31:97:F3:36:92:D7:C9:3E:46:B4:47:FB:21:CD:6C:7A:93:CB:B1:AE:58:CF:21:43:DF:24:FC:42

Está menos escrito que todo el certificado.

De hecho, esto es realmente igual que usar md5sum en datos sin procesar:

uudecode < <(
    sed '1s/^.*$/begin-base64 644 www.google.com.raw/;
         $s/^.*$/====/' www.google.com.crt
   )
ls -ltr
total 8
-rw-r--r-- 1 user user 1606 Nov 30 13:06 www.google.com.crt
-rw-r--r-- 1 user user 1146 Nov 30 16:30 www.google.com.raw

sha1sum www.google.com.raw 
0330787e9b7e114e662e77edac997109f8e5f06f  www.google.com.raw

md5sum www.google.com.raw 
5a4cb235c4f22e3a726a49f6bcea5b20  www.google.com.raw

Hay los mismos resultados.

Otro intento:

openssl s_client -connect security.stackexchange.com:443 -ign_eof \
    <<<$'HEAD / HTTP/1.0\r\n\r' 2>/dev/null |
  sed -ne '
    /^Server certificate/,${
       /-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{
          //{/END/{p;q}};p}}' >security.stackexchange.com.crt

openssl x509 -in security.stackexchange.com.crt -noout -sha256 -fingerprint
SHA256 Fingerprint=73:D8:42:9A:38:78:4D:21:98:29:DD:58:8C:52:6F:23:18:6A:58:99:AD:69:3A:DA:97:98:49:D4:FB:5A:A0:09

openssl x509 -in security.stackexchange.com.crt |
    sed '1s/^.*$/begin-base64 644 -/;$s/^.*$/====/' |
    uudecode |
    sha256sum |
    sed 'y|abcdef|ABCDEF|;
        :a;
    s/^\(\([0-9A-F]\{2\}:\)*\)\([0-9A-F]\{2\}\)\([0-9A-F]\)/:/g;
         ta'
73:D8:42:9A:38:78:4D:21:98:29:DD:58:8C:52:6F:23:18:6A:58:99:AD:69:3A:DA:97:98:49:D4:FB:5A:A0:09  -

Las huellas digitales solo son sumas de comprobación.

    
respondido por el F. Hauri 30.11.2013 - 13:49
fuente

Lea otras preguntas en las etiquetas