2008-09-18 20 views
8

Tengo un certificado dado instalado en mi servidor. Ese certificado tiene fechas válidas y parece perfectamente válido en el complemento MMC de certificados de Windows.¿Por qué este certificado X.509 no se considera válido?

Sin embargo, cuando intento leer el certificado, para usarlo en una HttpRequest, no puedo encontrarlo. Este es el código utilizado:

X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col = 
    store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true); 

xxx es el número de serie; el argumento true significa "solo certificados válidos". La colección devuelta está vacía.

Lo extraño es que si paso false, indicando que los certificados no válidos son aceptables, la colección contiene un elemento — el certificado con el número de serie especificado.

En conclusión: el certificado parece válido, pero el método Find lo considera no válido. ¿Por qué?

Respuesta

7

Intente verificar la cadena de certificados utilizando la clase X509Chain. Esto puede decirle exactamente por qué el certificado no se considera válido.

Como sugirió Erickson, su X509Store puede no tener el certificado de confianza de la CA de la cadena. Si usó OpenSSL u otra herramienta para generar su propia entidad emisora ​​de certificados autofirma, debe agregar el certificado público para esa entidad emisora ​​a X509Store.

+0

Los certificados de cadena están presentes, pero de alguna manera no fueron accesibles para este usuario. Utilicé este código de muestra de MSDN para verificar el estado de la cadena: http://tinyurl.com/4wfnng. Este código recupera diferentes estados dependiendo del usuario. Intentaré reinstalar los certificados. Gracias. – pvieira

2

Creo que los certificados x509 están vinculados a un usuario en particular. ¿Podría ser no válido porque en el código está accediendo a él como un usuario diferente al que se creó?

5

¿Está presente el certificado del emisor en la X509Store? Un certificado solo es válido si está firmado por alguien de su confianza.

¿Es este un certificado de una CA real, o uno que usted mismo firmó? Las herramientas de firma de certificados utilizadas a menudo por los desarrolladores, como OpenSSL, no agregan algunas extensiones importantes de forma predeterminada.

Cuestiones relacionadas