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