2010-01-27 41 views
5

¿Cómo puedo verificar mediante programación si se ha revocado cierto certificado de su lista de CRL de CA?C# verificar el certificado en la lista de CRL

que estoy haciendo esto:

X509Chain ch = new X509Chain(); 
ch.ChainPolicy.RevocationMode = X509RevocationMode.Online; 
ch.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; 
ch.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(1000); 
ch.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; 
ch.ChainPolicy.VerificationTime = DateTime.Now; 
ch.Build(certificate); 
foreach (X509ChainStatus s in ch.ChainStatus) 
{ 
    string str = s.Status.ToString(); 
    Console.WriteLine("str: " + str); 
} 
X509Store store = new X509Store(StoreName.Disallowed, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadWrite); 
bool isRevoked = store.Certificates.Contains(certificate); 
store.Close(); 
return !isRevoked && certificate.Verify(); 

Y me da "str: RevokedStatusUnknown". Solo si espero muchas horas después de revocar el certificado -> el estado se devuelve como revocado, a pesar de que publico la CRL inmediatamente después de revocar el certificado. ¿Por qué no accede a la CRL de forma instantánea?

Respuesta

1

Intente ejecutar el siguiente comando MS.

certutil -urlcache * delete 

Windows guarda los estados de revocación de certificados durante un determinado período, utilizando el comando anterior hará que se vacíe la memoria caché.

0

Esto es casi seguro que utiliza la caché de CRL local en su máquina.

Desde el símbolo del sistema, intente borrar primero la memoria caché. certutil -urlcache crl eliminar

Cuestiones relacionadas