PKCS#12证书中缺少强制信任链

时间:2015-07-01 00:10:08

标签: pkcs#12

如何在C#.NET的PKCS#12证书中包含所有CA信任链(信任链)?我从头开始就需要解决方案。我可以使用DOT NET库创建X509证书。但我不知道如何将所有CA信任链包含在PKCS#12证书格式中。信托链是:Entrust->我的CA->我的签发CA->我的证书。

请帮助我专家。

1 个答案:

答案 0 :(得分:1)

首先我想说,我已经有一段时间没在C#工作了,所以一开始我想用Java解释。如果您使用充气城堡和证书,那么您可以轻松地建立证书链并简单地插入链。这是一个示例java代码。

KeyStore store = KeyStore.getInstance("PKCS12", "BC");
store.load(null, null);
store.setKeyEntry(keyAlias, privKey, null, chain);
FileOutputStream fOut = new FileOutputStream(fileLocation);
store.store(fOut, password.toCharArray());

现在,证书链对象需要拥有所有链证书。像:

Certificate[] chain = new Certificate[]{(Certificate)childCertificate, (Certificate)subCaCertificate, (Certificate)caCertificate};

所以,正如你所看到的,链条应该从孩子到母亲。许多人只插入子证书,因此在导出期间不包括完整链。

现在,对于C#,我想用bouncycastle编写一些代码。请原谅我,如果我发生了一些错误,我不会在C#工作。 示例C#代码

     Pkcs12Store pkcs12Store = new Pkcs12Store();
     AsymmetricKeyParameter privateKey = ......

     X509CertificateEntry[] certEntry = new X509CertificateEntry[certChain.Count];
     for ( int k = 0; k < certChain.Count; k++ )
     {
         certEntry[k] = new X509CertificateEntry(certChain[k]);
     }
     pkcs12Store.SetKeyEntry (alias, new AsymmetricKeyEntry(privateKey), certEntry);

     MemoryStream memoryStream = new MemoryStream ();
     pkcs12Store.Save ( memoryStream, password, GetRandom ( 16 ) );
     byte[] data = memoryStream.GetBuffer ();
     data = Pkcs12Utilities.ConvertToDefiniteLength (data, password);

此处, certEntry 对象将包含所有证书链。