2010-01-27 4 views
5

Comment puis-je vérifier par programme si un certain certificat est révoqué à partir de sa liste de listes de révocation de certificats CA?C# verify certificat dans la liste CRL

Je fais ceci:

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(); 

et je reçois "str: RevokedStatusUnknown". Seulement si j'attends plusieurs heures après la révocation du certificat -> le statut est renvoyé comme révoqué, malgré le fait que je publie la liste de révocation de certificats immédiatement après la révocation du certificat. Pourquoi n'accède-t-il pas instantanément à la liste de révocation de certificats? Essayez l'exécution de la commande MS suivante:

Répondre

1

certutil -urlcache * delete 

de Windows met en cache les statuts de révocation de certificats pour une certaine période, en utilisant la commande ci-dessus vider le cache.

0

Il est presque certain que vous utilisez le cache CRL local sur votre machine. À partir de l'invite de commande, essayez d'abord de vider le cache. certutil -urlcache crl supprimer

Questions connexes