2012-02-01 8 views
15

Il numero di serie del certificato è una chiave univoca per il certificato X509? L'utente seleziona un certificato e il programma memorizza il numero di serie nelle preferenze. Il seguente codice restituisce il certificato selezionato?Il numero di serie è una chiave univoca per il certificato X509?

public static X509Certificate2 GetCertificateBySerialNumber(string serialNumber) 
{ 
    X509Certificate2 selectedCertificate = null; 
    X509Store store = null; 
    try 
    { 
     // get certificate from the store "My", "CurrentUser" 
     store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
     store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 
     X509Certificate2Collection allCertificates = (X509Certificate2Collection)store.Certificates; 
     X509Certificate2Collection foundCertificates = (X509Certificate2Collection)allCertificates.Find(X509FindType.FindBySerialNumber, serialNumber, false); 

     // select the first certificate in collection 
     foreach (X509Certificate2 certificate in foundCertificates) 
     { 
      selectedCertificate = certificate; 
      break; 
     } 
    } 
    finally 
    { 
     if (store != null) 
     { 
      store.Close(); 
     } 
    } 

    return selectedCertificate; 
} 

UPDATE: ho finito di usare i certificati identificazione personale, come suggerito da jglouie.

+1

Thumbnail ≠ Thumbprint –

+0

Aggiornato: usare identificazione personale. – isobretatel

risposta

12

No. Per esempio, OpenSSL lasciare sta all'utente di impostare questo quando creano certificati.

Vedi: http://www.openssl.org/docs/apps/x509.html

-set_serial n specifica il numero di serie per l'uso. Questa opzione può essere utilizzata con le opzioni -signkey o -CA. Se utilizzato insieme a con l'opzione -CA, il file del numero di serie (come specificato dalle opzioni RS-CAserial o -CAcreateserial) non viene utilizzato.

Il numero di serie può essere decimale o esadecimale (se preceduto da 0x). È anche possibile specificare numeri di serie negativi ma il loro utilizzo non è raccomandato.

3

Sì, secondo X.509 specification numero di serie è unico per la specifica CA:

4.1.2.2 Numero di serie

Il numero di serie è un numero intero assegnato dal CA per ogni certificato . Deve essere univoco per ciascun certificato emesso da una CA (ad esempio, il nome dell'emittente e il numero di serie identificano un certificato univoco ).

+7

Il numero di serie da solo non identifica il certificato in modo univoco, poiché i certificati di diverse CA possono avere lo stesso numero di serie. –

10

Come indicato in un'altra risposta, il numero di serie deve essere univoco all'interno della CA. Quindi il numero seriale da solo non può essere utilizzato come un ID univoco del certificato - i certificati di diverse CA possono avere lo stesso numero di serie. È necessario memorizzare una combinazione di proprietà Issuer e SerialNumber. Inoltre, per i certificati autofirmati e i numeri di software CA fatti in casa molto probabilmente scontreranno quante persone inizieranno a numerare da 0.

+3

+1. O non hai idea di cosa dovrebbe essere un numero seriale, quindi impostano sempre 0;) – TomTom

2

TL; DR: è necessario utilizzare una chiave composita di nome emittente + numero di serie. Se hai bisogno di una chiave semplice, usa l'identificazione personale del certificato.


Citando @ThomasPornin da security.stackexchange:

In un certificate, il numero di serie viene scelto dalla CA che ha rilasciato il certificato . È appena scritto nel certificato. La CA può scegliere il numero di serie in qualsiasi modo a suo piacimento, non necessariamente in modo casuale (e deve rientrare in 20 byte). Una CA è suppone scegliere numeri di serie univoci, cioè, unico per la CA. Non si può contare su un numero seriale unico al mondo; nel mondo dei sogni di X.509, è la coppia issuerDN + seriale che è univoca in tutto il mondo (ogni CA ha il proprio nome distinto univoco e fa attenzione a non riutilizzare i numeri di serie ).

Il identificazione personale è un valore hash calcolato sul certificato completo, che comprende tutti i suoi campi, tra cui la firma. Quello è univoco in tutto il mondo, per un determinato certificato, fino alla resistenza di collisione inerente della funzione di hash utilizzata. Il software Microsoft tende a utilizzare SHA-1, per il quale sono noti alcuni punti deboli teorici, ma non è stata ancora prodotta alcuna collisione effettiva (ancora).

Da: https://security.stackexchange.com/questions/35691/what-is-the-difference-between-serial-number-and-thumbprint

+2

https://shattered.io/ SHA-1 è ufficialmente interrotto. – foo

Problemi correlati