Certificato digitale "Firma e impronta digitale"

2

Qual è la differenza tra firma e impronta digitale del certificato digitale (identificazione personale)?

Conosco la firma: la firma effettiva per verificare che provenga dall'emittente. e Thumbprint (impronta digitale): l'hash stesso, utilizzato come forma abbreviata del certificato di chiave pubblica.

Ma cosa c'è esattamente dentro entrambi?

Entrambi sono valori hash ma con quali autorità di certificazione dei parametri lo creano ?

    
posta Johan Gelp 29.11.2013 - 17:32
fonte

2 risposte

6

Ecco la citazione pertinente da RFC 5280 .

The signatureValue field contains a digital signature computed upon the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded tbsCertificate is used as the input to the signature function. This signature value is encoded as a BIT STRING and included in the signature field. The details of this process are specified for each of the algorithms listed in [RFC3279], [RFC4055], and [RFC4491].

By generating this signature, a CA certifies the validity of the information in the tbsCertificate field. In particular, the CA certifies the binding between the public key material and the subject of the certificate.

In sostanza, la firma del certificato è un valore firmato dalla CA delle informazioni codificate nel certificato, incluse cose come il soggetto, l'emittente e la chiave pubblica del certificato. Il processo di convalida delle firme è descritto in vari RFC come accennato.

L'impronta digitale del certificato è semplicemente un valore di hash sha1 e sha256 calcolato sull'intero certificato.

    
risposta data 29.11.2013 - 18:12
fonte
1

Esempio pratico

Ottenere un certificato per giocare con

Utilizzo di comandi di basso livello openssl :

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

Forse non è il modo più semplice, ma tra man openssl e man sed , ho fatto una scelta ...

Quindi potresti vedere cos'è un certificato 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

C'è un mucchio di 9168 bit (o 1146 byte), che contengono molti dettagli:

Nel contenuto del certificato

Un certificato x509 contiene molte informazioni come oggetto, emittente, date valide, altri certificati firmati ...

Potresti recuperare informazioni specifiche per:

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

oppure:

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

scaricherà tutti i dettagli, inclusa la chiave pubblica, gli algoritmi delle firme ...

Le impronte digitali

Sono come md5sum per la convalida di un file: per verificare (per esempio: per telefono), potresti usare un tipo di impronta digitale.

Le impronte digitali non contengono più informazioni leggibili! È 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

È meglio scrivere l'intero certificato.

In effetti, questo è veramente uguale all'uso di md5sum sui dati non elaborati:

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

Ci sono gli stessi risultati.

Un'altra occasione:

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  -

Le impronte digitali sono solo checksum.

    
risposta data 30.11.2013 - 13:49
fonte

Leggi altre domande sui tag