2012-05-09 17 views
7

İstemcilerin CRL'yi yeniden yüklemesine neden olan CRL (Sertifika İptal Listesi) önbelleğini hemen geçersiz hale getirmenin bir yolu var mı?Geçersiz kılma CRL önbelleği

C# dosyasında 'certutil.exe' komut satırına başvurmadan bunu başarmak isterim.

Daha da iyisi geçersizlik zamanını ayarlamak mümkün olacaktır (gibi UtcNow + 12saat) Sana certutil.exe kullanmak istemediğini biliyorum

+0

Sorununuz yalnızca cmd pencereyse, görünür bir komut satırı penceresi olmadan bir işlemi (certutil) çalıştırabilirsiniz. – Ondra

cevap

0

ancak cmd penceresi gösterilmediği uygulamanızda çalıştırabilirsiniz bu şekilde yukarı, istemediğin şey buysa.

public bool ClearCRLCache() 
{ 
    var pw = new ProcessWrapper(); 
    var result = pw.Start("certutil.exe", "-urlcache * delete"); 
    // -2147024637 is the exitcode when the urlcache is empty 
    return (result == 0 || result == -2147024637); 
} 

sınıf ProcessWrapper:

public class ProcessWrapper 
{ 
    /// <summary> 
    /// Output from stderr 
    /// </summary> 
    public string StdErr { get; private set; } 

    /// <summary> 
    /// Output from stdout 
    /// </summary> 
    public string StdOut { get; private set; } 

    /// <summary> 
    /// Starts a process 
    /// </summary> 
    /// <param name="command">Executable filename</param> 
    /// <returns>Process exitcode</returns> 
    public int Start(string command) 
    { 
     return Start(command, ""); 
    } 

    /// <summary> 
    /// Starts a process with commandline arguments 
    /// </summary> 
    /// <param name="command">Executable filename</param> 
    /// <param name="arguments">Commanline arguments for the process</param> 
    /// <returns>Process exitcode</returns> 
    public int Start(string command, string arguments) 
    { 
     return Start(command, arguments, ""); 
    } 

    /// <summary> 
    /// Starts a process with commandline arguments and working directory 
    /// </summary> 
    /// <param name="command">Executable filename</param> 
    /// <param name="arguments">Commanline arguments for the process</param> 
    /// <param name="workingDirectory">Working directory for the process</param> 
    /// <returns>Process exitcode</returns> 
    public int Start(string command, string arguments, string workingDirectory) 
    { 
     StdErr = ""; 
     StdOut = ""; 
     var proc = new Process(); 
     proc.StartInfo.FileName = command; 
     proc.StartInfo.Arguments = arguments; 
     proc.StartInfo.WorkingDirectory = workingDirectory; 
     proc.StartInfo.UseShellExecute = false; 
     proc.StartInfo.RedirectStandardOutput = true; 
     proc.StartInfo.RedirectStandardError = true; 
     proc.EnableRaisingEvents = true; 
     proc.StartInfo.CreateNoWindow = true; 

     // Write messages from stderr to StdErr property 
     proc.ErrorDataReceived += (sender, e) => 
     { 
      StdErr += e.Data + Environment.NewLine; 
     }; 

     // Write messages from stdout to StdOut property 
     proc.OutputDataReceived += (sender, e) => 
     { 
      StdOut += e.Data + Environment.NewLine; 
     }; 

     proc.Start(); 

     proc.BeginErrorReadLine(); 
     proc.BeginOutputReadLine(); 

     proc.WaitForExit(); 
     return proc.ExitCode; 
    } 
} 
1

ben zaten zamanlayıcı ayarları bağlı olarak istemci makine üzerinde her x saatte CRL önbelleğini güncellemek, böyle bir çözüm uygulamak. Burada CRL okuyabilirsiniz: http://social.technet.microsoft.com/wiki/contents/articles/4954.certificate-status-and-revocation-checking.aspx

CRL önbelleği özel klasörlerine istemci makinesinde saklanır ve Meta veri ve İçerik klasörlerde saklanan iki dosyadan oluşur. Bu klasörler “C: \ Belgeler ve Ayarlar {kullanıcı adı} \ Uygulama Verileri \ Microsoft \ CryptnetUrlCache” içine yerleştirilir ve makine başına önbellek konumu “% WINDIR% \ System32 \ config \ SystemProfile \ Application Data \ Microsoft \ CryptnetUrlCache” şeklindedir. . Cahce dosyaları, MDRL karma toplamı CRL url olarak adlandırılır. Klasördeki dosya "Meta veri" bazı sabit veriler, son güncelleme tarihi, CRL url, CRL dosya boyutu ve diğerlerini içerir. Ve "İçerik" klasöründeki dosya, CRL dosyasının kendisidir ve "Metadata" dosyasındaki dosyayla aynı ada sahiptir. Meta dosyasını ayrıştırıyorum, geçersiz olup olmadığını kontrol edin ve CRL url tarafından yeni CRL dosyası yükleyin, bunu "İçerik" klasörüne yerleştirin ve meta veri dosyasını yeniden oluşturun. Bu amaçlar için BouncyCastle kütüphanesini kullanıyorum. Zamanlama kütüphanesi olarak Quartz.Net kullanıyorum.