2013-06-09 141 views
5

Moje pytanie jest podobne do pytania this.Tryb odwołań offline

Próbuję sprawdzić listę odwołania tylko przy użyciu lokalnej listy CRL.

Używam X509Chain.Build() z następującymi parametrami:

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; 

ale pojawia się następujące błędy:

  1. RevocationStatusUnknown => Funkcja cofnięcie nie jest w stanie sprawdzić unieważnienia dla certyfikatu.
  2. OfflineRevocation => Funkcja unieważniania nie mogła sprawdzić odwołania certyfikatu, ponieważ serwer odwołania to w trybie offline.

Dziwne jest to, że gdy próbuję sprawdzić listę odwołania on-line (w wyniku zostaną zaktualizowane CRL), problem został rozwiązany. więc wygląda na to, że jeśli cokolwiek jest w pamięci podręcznej, problem nie może być już odtworzony.

Pomyślałem, że być może komunikat o błędzie jest niepoprawny i co tak naprawdę się dzieje, to, że gdy pamięć podręczna jest pusta, jest jakiś wyjątek, który powoduje pojawienie się tego komunikatu. Inną opcją jest to, że jest jakaś flaga informująca, czy pamięć podręczna została kiedyś zaktualizowana, a jeśli nigdy nie była aktualizowana, próbuje uzyskać informacje z zewnętrznego serwera

czy ktokolwiek może wskazać, jaki jest powód ten przypadek?

+0

Jestem również widząc takie samo zachowanie .Nie oznacza to, że serwer jest w trybie offline, ale mówi, że nie mógł sprawdzić odwołania. Wydaje się, że nie dzieje się tak w przypadku certyfikatów z podpisem własnym. – Mark

Odpowiedz

1

X509RealNode.None: Nie sprawdzaj list CRL ani OCSP.

X509RealocationMode.Offline: Jeśli CRL jest buforowana i nadal obowiązuje, użyj go do odwołania. W przeciwnym razie, jeśli certyfikat powinien mieć zaznaczone odwołanie (w zależności od EntireChain/ExcludeRoot/EndCertificateOnly), należy zgłosić OfflineVerification | RevocationStatusUnknown. (Odpowiedzi OCSP mogą być również buforowane, jeśli sugeruje ich wartość nextUpdate, ale nie jestem pewien, czy tak jest, czy nie).

X509RefocationMode.Online: Jeśli punkt końcowy OCSP jest opisany w certyfikacie, wykonaj kontrolę OCSP. Jeśli protokół OCSP nie zapewnia rozstrzygającej odpowiedzi, a określono punkt dystrybucji listy CRL, sprawdź pamięć podręczną dla listy CRL. Jeśli jest ona ważna, użyj jej jako podstawy do unieważnienia; w przeciwnym razie pobierz CRL i buforuj go. Jeśli wszystkie próby znalezienia statusu odwołania nie powiodą się, ustaw wartość RevocationStatusUnknown.

Tryb offline jest trudny, z powodu wygaśnięcia listy CRL. Nawet jeśli właśnie wysłałeś prośbę online godzinę temu, nie oznacza to, że tryb offline będzie działał teraz. Najlepszym sposobem, w jaki mogę o tym pomyśleć, jest szybkie zrobienie szczęśliwej drogi; a jeśli pojawią się błędy inne niż RevocationStatusUnknown lub OfflineRevocation, należy rozważyć, że łańcuch się nie powiódł ... ale jedno z nich oznacza pytanie ponownie w trybie Online.

(Jak można ustalić poprzez http://referencesource.microsoft.com, Offline odpowiada CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, który jest tak słabo udokumentowane w https://msdn.microsoft.com/en-us/library/windows/desktop/aa376078(v=vs.85).aspx, ale być może „tylko sprawdzić Cache” część jest bardziej pouczające)