2016-07-19 15 views
0

Я хотел бы написать программу, которая контролирует дату истечения срока действия CRL (Certificate Revocation List). Поэтому я хотел бы прочитать следующие свойства из файла CRL: 1) Дата вступления в силу 2) Следующее обновление 3) Следующий CRL ОпубликоватьИзвлечь свойства из файла CRL с помощью C#

Как я могу выполнить свою задачу? Мне удалось найти типы для 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

Edit:

Вы можете использовать библиотеку 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. Он отличается от сертификата x509. NotBefore - это свойство внутри сертификата, которое подразумевает, что когда сертификат стал действительным, NotAfter подразумевает, что срок действия сертификата истечет. – StackNewbie

+0

Я редактирую сообщение и добавляю код для обработки CRL. Я надеюсь быть помощником. –

+0

Большое спасибо! эта библиотека именно то, что мне нужно. – StackNewbie

0

Хотя, вопрос ответил, я бы добавить, что есть еще один хороший открытый проект, который расширяет родную .NET Framework для работа с объектами криптографии, которые отсутствуют в .NET: https://github.com/Crypt32/pkix.net

в отношении CRL, я разработал X509CRL2 класс аналогично встроенному X509Certificate2: X509CRL2 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, но и создавать CRL версии 2.

Примечание: библиотека pkix.net полагается на мой другой открытый проект https://github.com/Crypt32/Asn1DerParser.NET, который используется для анализа структур ASN.

+0

Спасибо за ваш ответ, я нахожу ваш ответ полезным. Я изучу использование вашего кода. – StackNewbie