2012-02-01 20 views
15

¿El número de serie del certificado es una clave única para el certificado X509? El usuario selecciona un certificado y el programa almacena el número de serie en las preferencias. ¿El siguiente código devolverá el certificado seleccionado?¿El número de serie es una clave única para el certificado 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; 
} 

ACTUALIZACIÓN: Me terminó mediante huella digital del certificado, según lo sugerido por jglouie.

+1

miniatura ≠ huella digital –

+0

Actualizado: utilizar la huella digital. – isobretatel

Respuesta

12

No. Por ejemplo, OpenSSL permite al usuario configurar esto cuando crean certificados.

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

-set_serial n especifica el número de serie de su uso. Esta opción se puede usar con las opciones -signkey o -CA. Si se utiliza junto con con la opción -CA, no se utiliza el archivo de número de serie (como se especifica en las opciones -CAserial o -CAcreateserial).

El número de serie puede ser decimal o hexadecimal (si está precedido por 0x). Los números de serie negativos también se pueden especificar pero no se recomienda su uso.

3

Sí, de acuerdo con X.509 specification número de serie es único para CA específica:

4.1.2.2 Número de serie

El número de serie es un número entero asignado por la CA para cada certificado . DEBE ser exclusivo para cada certificado emitido por una CA dada por (es decir, el nombre del emisor y el número de serie identifican un certificado único ).

+7

El número de serie por sí solo no identificará el certificado de forma exclusiva, ya que los certificados de diferentes CA pueden tener el mismo número de serie. –

10

Como se menciona en otra respuesta, el número de serie debe ser único dentro de la CA. Por lo tanto, el número de serie por sí solo no se puede usar como una identificación única del certificado: los certificados de diferentes CA pueden tener el mismo número de serie. Debe almacenar la combinación de las propiedades del Issuer y SerialNumber. Además, para los certificados autofirmados y los números de software de CA caseros, probablemente colisione ya que muchas personas comenzarán a numerar desde 0.

+3

+1. O no tiene ni idea de qué se supone que es un número de serie, por lo que establece 0 todo el tiempo;) – TomTom

2

TL; DR: Debe usar una clave compuesta del nombre del emisor + número de serie. Si necesita una clave simple, use la huella digital del certificado.


Citando @ThomasPornin de security.stackexchange:

En un certificate, el número de serie es elegido por la CA que emitió el certificado. Está escrito en el certificado. El CA puede elegir el número de serie en cualquier forma que considere conveniente, no necesariamente aleatoriamente (y tiene que caber en 20 bytes). Una CA es supuesta para elegir números de serie únicos, es decir, únicos para la CA. No puede contar con , un número de serie único en todo el mundo; en el mundo de los sueños de X.509, es el par issuerDN + serie que es único en el mundo (cada CA tiene su propio nombre distintivo único y tiene cuidado de no reutilizar los números de serie ).

thumbprint es un valor hash calculado sobre el certificado completo, que incluye todos sus campos, incluida la firma. Ese es único en el mundo, para un certificado dado, hasta la resistencia a la colisión inherente de la función hash utilizada. El software de Microsoft tiende a usar SHA-1, para el cual se conocen algunas debilidades teóricas, pero no se ha producido ninguna colisión real (todavía).

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

+2

https://shattered.io/ SHA-1 oficialmente está roto ahora. – foo

Cuestiones relacionadas