2013-06-09 13 views
5

La mia domanda è simile alla domanda this.Modalità di revoca offline

Sto provando a controllare l'elenco di revoche solo utilizzando il CRL locale.

Sto usando X509Chain.Build() con i seguenti parametri:

var chainMachine = new X509Chain(true); 
      chainMachine.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; 
      chainMachine.ChainPolicy.UrlRetrievalTimeout = TimeSpan.FromSeconds(30); 
      chainMachine.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; 
      chainMachine.ChainPolicy.VerificationTime = DateTime.Now; 
      chainMachine.ChainPolicy.RevocationMode = X509RevocationMode.Offline; 

ma ottengo i seguenti errori:

  1. RevocationStatusUnknown => La funzione di revoca non è in grado di controllare la revoca per il certificato.
  2. OfflineRevocation => La funzione di revoca non è stata in grado di controllare la revoca del certificato poiché il server di revoca è non in linea.

La cosa strana è che una volta che cerco di controllare l'elenco di revoche online (in seguito sarà aggiornato il CRL), il problema viene risolto. quindi sembra che una volta che c'è qualcosa nella cache il problema non possa più essere riprodotto.

Ho pensato che forse il messaggio di errore non è corretto e ciò che effettivamente accade è che quando la cache è vuota c'è qualche eccezione che fa apparire questo messaggio. un'altra opzione è che forse c'è qualche bandiera che dice se la cache è stata aggiornata qualche volta, e se non è mai stata aggiornata cerca di ottenere le informazioni da un server esterno

qualcuno può indicare qual è il motivo per questa edizione?

+0

sto vedendo anche lo stesso comportamento .Non mi dice che il server è offline, dice solo che non può controllare la revoca. Questo non sembra accadere per i certificati autofirmati. – Mark

risposta

1

X509RevocationMode.None: Non controllare CRL o OCSP.

X509RevocationMode.Offline: Se un CRL è memorizzato nella cache e ancora valido, utilizzarlo per la revoca. Altrimenti, se il certificato dovesse avere revocato il controllo (a seconda di EntireChain/ExcludeRoot/EndCertificateOnly), segnalare OfflineVerification | RevocationStatusUnknown. (Le risposte OCSP possono anche essere memorizzate nella cache se il loro valore nextUpdate lo suggerisce, ma non sono sicuro che lo faccia o no).

X509RevocationMode.Online: se un endpoint OCSP è descritto nel certificato, eseguire un controllo OCSP. Se OCSP non produce una risposta definitiva e viene definito un punto di distribuzione CRL, controllare la cache per il CRL. Se è valido, utilizzalo come base per la revoca; altrimenti scarica il CRL e memorizzalo nella cache. Se tutti i tentativi di trovare uno stato di revoca falliscono, impostare RevocationStatusUnknown.

La modalità offline è complessa, a causa della scadenza CRL. Anche se hai appena fatto una richiesta online un'ora fa, ciò non significa che Offline funzionerà ora. L'uso migliore che riesco a pensare è rendere veloce il percorso felice; e se si verificano errori diversi da RevocationStatusUnknown o OfflineRevocation, considerare la catena non riuscita ... ma uno di questi significa chiedere nuovamente con la modalità Online.

(Come può essere determinato tramite http://referencesource.microsoft.com, non in linea corrisponde a CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, che è quanto di più scarsamente documentato a https://msdn.microsoft.com/en-us/library/windows/desktop/aa376078(v=vs.85).aspx, ma forse la parte "Check Solo Cache" è più illuminante)