2012-07-27 12 views
5

Stiamo aggiungendo la verifica dei certificati server nell'handshake SSL per uno dei nostri clienti. Essendo molto nuovo al mondo della crittografia e C, pensavo che avrei prima chiarito i miei concetti su queste cose e poi avrei iniziato con l'implementazione.Che cosa sono diversi tipi di certificato, formati in Crittografia

Quindi, ho cercato spesso su Google principalmente i concetti relativi ai certificati, ma non sono riuscito a chiarire meglio i miei concetti. In realtà ha aggiunto più confusione. :)

Ecco alcune cose che non capisco quasi affatto: 1. Che cos'è il formato base64? È lo stesso di DER? 2. Il file PEM contiene sempre il contenuto di base64? 3. Qual è il formato utilizzato da Windows Certificate Store? È binario?

Qualcuno può aiutarmi qui. Sarei molto grato se queste cose si chiarissero per me.

risposta

9

La struttura di un certificato X.509 è definita utilizzando ASN.1. Ecco un estratto della definizione complessiva struttura an X.509 certificate:

Certificate ::= SEQUENCE { 
    tbsCertificate  TBSCertificate, 
    signatureAlgorithm AlgorithmIdentifier, 
    signatureValue  BIT STRING } 

TBSCertificate ::= SEQUENCE { 
    version   [0] EXPLICIT Version DEFAULT v1, 
    serialNumber   CertificateSerialNumber, 
    signature   AlgorithmIdentifier, 
    issuer    Name, 
    validity    Validity, 
    subject    Name, 
    subjectPublicKeyInfo SubjectPublicKeyInfo, 
    issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, 
         -- If present, version MUST be v2 or v3 
    subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, 
         -- If present, version MUST be v2 or v3 
    extensions  [3] EXPLICIT Extensions OPTIONAL 
         -- If present, version MUST be v3 
    } 

Un valore Certificate (con i valori contenuti riempiti) è codificato utilizzando il formato DER, che è un formato binario.

Base64 è un modo generale di codificare sequenze binarie in testo, riducendo l'insieme di byte utilizzati per i caratteri ASCII leggibili (quindi questa rappresentazione è più lunga).

Un certificato in formato PEM è il Base64 codifica del DER-codifica del certificato, con una linea di ritorno al termine di ogni blocco di 64 caratteri, posto tra delimitatori:

-----BEGIN CERTIFICATE----- 
MIIB2zCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAYMRYwFAYDVQQDEw1OZXRn 
... 
-----END CERTIFICATE----- 

È potrebbe anche avere la chiave privata in formato PEM, nel qual caso i delimitatori sarebbero -----BEGIN RSA PRIVATE KEY----- (e corrispondenti a END), ad esempio.

Sul cavo, durante una connessione TLS, viene utilizzato DER.

Non importa ciò che l'archivio di certificati Windows utilizza internamente, dovrebbe essere in grado di importare/esportare certificati DER o PEM/Base64.


Il certificato "tipi" è un argomento più ampio rispetto al formato DER/base64. La maggior parte dei certificati utilizzati per SSL/TLS sono certificati X.509. Quindi ottieni i profili di utilizzo. Il più comune è lo Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile, che definisce essenzialmente il modo in cui le autorità di certificazione dovrebbero emettere certificati e in che modo le entità devono verificare i certificati remoti.

Potreste anche essere interessati a queste domande:

Più in generale, ottenendo un libro su PKI dovrebbe aiutare.

+0

Grazie Bruno, ha aiutato molto!Sto avendo una visione molto più chiara ora. Per quanto riguarda il formato del negozio di Windows, sto usando le API Crypto per recuperare i certificati e sembra che supporti solo i formati binari. Dovrò scrivere il mio codificatore base64 per convertire quei certificati. –

Problemi correlati