c# - solicitado - x509certificate2
¿Es el número de serie una clave única para el certificado X509? (4)
Como se mencionó 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 ID ú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 Emisor y del Número de serie. Además, para los certificados autofirmados y los números de software de CA hechos en casa, lo más probable es que colisionen, ya que muchas personas comenzarán a numerar desde 0.
¿Es el número de serie del certificado 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?
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: Terminé usando la huella digital del certificado, como lo sugirió jglouie .
No. Por ejemplo, OpenSSL permite al usuario configurar esto cuando crean certificados.
Consulte: http://www.openssl.org/docs/apps/x509.html
-set_serial n especifica el número de serie a utilizar. Esta opción se puede utilizar con las opciones -signkey o -CA. Si se usa junto con la opción -CA, el archivo del número de serie (como se especifica en las opciones -Considerial o -CAcreateserial) no se usa.
El número de serie puede ser decimal o hexadecimal (si está precedido por 0x). También se pueden especificar números de serie negativos, pero no se recomienda su uso.
Sí, según la especificación X.509, el número de serie es único para una 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 a cada certificado. DEBE ser único para cada certificado emitido por una CA dada (es decir, el nombre del emisor y el número de serie identifican un certificado único).
TL; DR : debe utilizar 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. Se acaba de escribir en el certificado. La CA puede elegir el número de serie de cualquier manera que considere conveniente, no necesariamente al azar (y tiene que caber en 20 bytes). Se supone que una CA elige números de serie únicos, es decir, únicos para la CA. No puede contar con que un número de serie sea único en todo el mundo; en el mundo de los sueños de X.509, es el par issuerDN + serial que es único en todo el mundo (cada CA tiene su propio nombre distintivo y cuida de no reutilizar los números de serie).
La huella digital es un valor de 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 de 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 aún no se ha producido ninguna colisión real.