2016-07-19 50 views
0

我想編寫一個監視CRL(證書撤銷列表)到期日期的程序。 因此,我想閱讀從CRL文件中的以下屬性: 1)生效日期 2)下次更新 3)接下來CRL發佈使用C#從CRL文件中提取屬性

如何可以完成我的任務? 我只設法找到X509Certificate2,X509Chain,x509RevocationMode等類型。

+0

你已經試過了什麼代碼? – FishStix

+0

我曾嘗試通過msdn查看有關加密的文檔。 沒有發現任何關於分析CRL文件的信息。 – StackNewbie

回答

2

您可以使用類X509Certificate2來獲取所需信息。

例如:處理一個認證文件

X509Certificate2 x509 = new X509Certificate2(); 
byte[] rawData = ReadFile(fname); 
x509.Import(rawData); 
var validDate= x509 . NotBefore;  
var expireDate = x509.NotAfter; 


//Reads a file. 
internal static byte[] ReadFile (string fileName) 
{ 
    FileStream f = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
    int size = (int)f.Length; 
    byte[] data = new byte[size]; 
    size = f.Read(data, 0, size); 
    f.Close(); 
    return data; 
} 

參考:

https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2(v=vs.110).aspx

編輯:

可以使用BouncyCastle.Crypto庫來處理CRL。 下載庫,並引用BouncyCastle.Crypto.dll 或安設的NuGet包:

Install-Package BouncyCastle 


    //reference library BouncyCastle.Crypto 
    //http://www.bouncycastle.org/csharp/ 
    //Load CRL file and access its properties 
    public void GetCrlInfo(string fileName, Org.BouncyCastle.Math.BigInteger serialNumber, Org.BouncyCastle.X509.X509Certificate cert) 
    { 
     try 
     { 
      byte[] buf = ReadFile(fileName); 
      X509CrlParser xx = new X509CrlParser(); 
      X509Crl ss = xx.ReadCrl(buf); 
      var nextupdate = ss.NextUpdate; 
      var isRevoked = ss.IsRevoked(cert); 
      Console.WriteLine("{0} {1}",nextupdate,isRevoked); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
+0

該代碼不適用於CRL File.It與x509證書不同。 NotBefore是證書內的屬性,暗示證書何時生效,NotAfter暗示證書何時到期。 – StackNewbie

+0

我編輯帖子並添加處理CRL的代碼。我希望成爲幫手。 –

+0

非常感謝!這個庫正是我所需要的。 – StackNewbie

0

雖然,該問題的答案,我想補充一點,還有一個擴展本地的.NET Framework到另一個良好的開放項目與缺少在.NET加密對象的工作:https://github.com/Crypt32/pkix.net

在問候CRL,我開發了一個X509CRL2類以類似的方式,以內置X509Certificate2X509CRL2 Class。用法很簡單:

// reference System.Security.Cryptography.X509Certificates namespace 
var crl = new X509CRL2(@"C:\temp\crlfile.crl"); 
// Effective date: 
var effective = crl.ThisUpdate; 
// next update: 
var nextupdate = crl.NextUpdate; 
// next publish: 
var nextPublishExtension = crl.Extensions["1.3.6.1.4.1.311.21.4"]; 
if (nextPublishExtension != null) { nextPublishExtension.Format(1); } 

我支持多種格式的CRL文件,包括純二進制,Base64甚至十六進制格式。

通過使用此類,您不僅可以讀取CRL屬性,還可以生成版本2 CRL。

注意:pkix.net庫依賴於我的另一個打開的項目https://github.com/Crypt32/Asn1DerParser.NET,它用於解析ASN結構。

+0

感謝您的回答,我發現您的答案是有益的。我會考慮使用你的代碼。 – StackNewbie