2015-12-23 3 views
1

Я создал свой собственный корневой сертификат CA с Bouncy Castle, и я использую его для создания других сертификатов. Я хочу создать список отзыва сертификатов (CRL), чтобы включить список revoqued сертификатов, используя Bouncy Castle C#. Пример:Создать CRL-файл с Bouncy Castle C#

//Retrieve CA root certificate 

X509Store CAstore = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
CAstore.Open(OpenFlags.ReadWrite | OpenFlags.OpenExistingOnly); 

X509Certificate2Collection x509Certificate2Collection = 
CAstore.Certificates.Find(X509FindType.FindBySerialNumber, 
         this.textBoxSerialCA.Text, true); 

X509Certificate2 cert = x509Certificate2Collection[0]; 
var certCA = DotNetUtilities.FromX509Certificate(cert); 
CAstore.Close(); 

X509V2CrlGenerator crlGen = new X509V2CrlGenerator(); 
crlGen.SetIssuerDN(certCA.IssuerDN); 
crlGen.SetThisUpdate(DateTime.Now); 
crlGen.SetNextUpdate(DateTime.Now.AddYears(1)); 
crlGen.SetSignatureAlgorithm("SHA1withRSA"); 

crlGen.AddCrlEntry(BigInteger.One, DateTime.Now, CrlReason.PrivilegeWithdrawn); 

crlGen.AddExtension(X509Extensions.AuthorityKeyIdentifier, 
        false, 
        new AuthorityKeyIdentifierStructure(certCA)); 

crlGen.AddExtension(X509Extensions.CrlNumber, 
        false, 
        new CrlNumber(BigInteger.One)); 

var randomGenerator = new CryptoApiRandomGenerator(); 
var random = new SecureRandom(randomGenerator); 

var Akp = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(cert.PrivateKey).Private;     


X509Crl crlTemp = crlGen.Generate(Akp,random); 

Все в порядке до этого момента. Как сохранить объект X509Crl в файл .crl?

С уважением.

ответ

2

Этот ответ приходит довольно поздно, но вы можете использовать класс PemWriter в Bouncy Castle для записи в файл PEM.

PemWriter pemWriter = new PemWriter(new StreamWriter(File.Open(fileName, FileMode.Create))); 
pemWriter.WriteObject(crlTemp); 
pemWriter.Writer.Flush(); 
pemWriter.Writer.Close(); 
0

И после того, как вы получили CRL в формате PEM вы можете преобразовать его с помощью OpenSSL с помощью следующей команды:

openssl crl -in list.pem -outform der -out list.crl 
0

В BouncyCastle.Crypto версия 1.7.4114.6375, я был в состоянии взять код и просто добавить:

var b = crlTemp.GetEncoded(); 

System.IO.File.WriteAllBytes(@"C:\temp\test.crl", b); 

Затем в Windows, дважды щелкнув на "test.crl 'откроет стандартный встроенный диалог отзыва сертификатов без каких-либо ошибок, и вся информация будет выглядеть корректно по сравнению с другими файлами CRL.

Смежные вопросы