2013-06-09 33 views
5

Câu hỏi của tôi tương tự như câu hỏi this.Chế độ thu hồi ngoại tuyến

Tôi đang cố kiểm tra danh sách thu hồi chỉ bằng CRL cục bộ.

Tôi đang sử dụng X509Chain.Build() với các thông số sau:

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; 

Nhưng tôi nhận được các lỗi sau đây:

  1. RevocationStatusUnknown => Chức năng thu hồi là không thể kiểm tra thu hồi cho chứng chỉ.
  2. OfflineRevocation => Chức năng Thu hồi không thể kiểm tra việc thu hồi chứng chỉ vì máy chủ thu hồi là ngoại tuyến.

Điều kỳ lạ là khi tôi cố gắng để kiểm tra danh sách thu hồi trực tuyến (kết quả là CRL sẽ được cập nhật), vấn đề này được giải quyết. do đó, có vẻ như một khi có bất cứ điều gì trong bộ nhớ cache vấn đề không thể được sao chép nữa.

Tôi nghĩ rằng có thể thông báo lỗi không chính xác và điều thực sự xảy ra là khi bộ nhớ cache trống, có một số ngoại lệ khiến cho thông báo này bật lên. một tùy chọn khác là có thể có một số cờ cho biết liệu bộ nhớ cache đã được cập nhật một thời gian chưa và đã cập nhật thông tin từ máy chủ bên ngoài chưa. vấn đề này?

+0

Tôi cũng nhìn thấy những hành vi tương tự .Nó không cho tôi biết máy chủ đang ngoại tuyến, nó chỉ nói rằng nó không thể kiểm tra việc thu hồi. Điều này dường như không xảy ra đối với chứng chỉ tự ký. – Mark

Trả lời

1

X509RevocationMode.None: Không kiểm tra CRL hoặc OCSP.

X509RevocationMode.Offline: Nếu CRL được lưu trong bộ nhớ cache và vẫn hợp lệ, hãy sử dụng nó để thu hồi. Nếu không, nếu chứng chỉ cần phải có kiểm tra thu hồi (tùy thuộc vào EntireChain/ExcludeRoot/EndCertificateOnly), báo cáo OfflineVerification | RevocationStatusUnknown. (Phản hồi OCSP cũng có thể được lưu trong bộ nhớ cache nếu giá trị nextUpdate của chúng được đề xuất, nhưng tôi không chắc chắn liệu nó có hoạt động hay không).

X509RevocationMode.Online: Nếu điểm cuối OCSP được mô tả trong chứng chỉ thực hiện kiểm tra OCSP. Nếu OCSP không mang lại câu trả lời xác thực và điểm phân phối CRL được xác định, hãy kiểm tra bộ nhớ cache cho CRL. Nếu nó hợp lệ, hãy sử dụng nó làm cơ sở thu hồi; nếu không hãy tải xuống CRL và lưu nó vào bộ nhớ cache. Nếu tất cả các nỗ lực tìm thấy trạng thái rút lại không thành công, hãy đặt RevocationStatusUnknown.

Chế độ ngoại tuyến rất khó khăn, do CRL hết hạn. Ngay cả khi bạn vừa thực hiện yêu cầu Trực tuyến một giờ trước, điều đó không có nghĩa là Offline sẽ hoạt động ngay bây giờ. Việc sử dụng tốt nhất tôi có thể nghĩ đến cho nó là làm cho con đường hạnh phúc nhanh chóng; và nếu bạn nhận được bất kỳ lỗi nào khác ngoài RevocationStatusUnknown hoặc OfflineRevocation thì hãy xem xét chuỗi bị lỗi ... nhưng một trong hai phương thức đó lại hỏi lại với chế độ Trực tuyến.

(Như có thể xác định thông qua http://referencesource.microsoft.com, Offline tương ứng với CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, đó là về như tài liệu thưa thớt tại https://msdn.microsoft.com/en-us/library/windows/desktop/aa376078(v=vs.85).aspx, nhưng có lẽ "Kiểm tra bộ nhớ cache Chỉ" một phần là làm sáng tỏ hơn)

Các vấn đề liên quan