这几天我一直在想办法解决这个问题。我已经放弃了。我正在尝试从 CA 的证书和私钥 PEM 文件创建 pfx。我能够创建证书和密钥,但现在我无法找出 OpenSSL.X509.PKCS12 中的最后一个参数。这是我所拥有的:
private void btnCreatePFX_Click(object sender, EventArgs e)
{
string password = "p@ssw0rd";
string key_path = @"certs\ca_key.key";
string cert_path = @"certs\ca_cert.crt";
string k = File.ReadAllText(key_path);
string c = File.ReadAllText(cert_path);
OpenSSL.Core.BIO key_bio = new OpenSSL.Core.BIO(k);
OpenSSL.Core.BIO cert_bio = new OpenSSL.Core.BIO(c);
OpenSSL.Crypto.CryptoKey key = OpenSSL.Crypto.CryptoKey.FromPrivateKey(k, "");
OpenSSL.X509.X509Certificate cert = new OpenSSL.X509.X509Certificate(cert_bio);
//OpenSSL.Core.Stack<OpenSSL.X509.X509Certificate> hmm = new OpenSSL.Core.Stack<OpenSSL.X509.X509Certificate>();
var pfx = new OpenSSL.X509.PKCS12(password, key, cert, null); // <-- Problem with 4th parameter (I think)
}
我知道第四个参数需要是 OpenSSL.Core.Stack<OpenSSL.X509.X509Certificate> 但我不知道如何设置它。源代码中的测试读取一个 pfx,然后使用同一个 pfx 对象的属性来创建新的。因此,他们很容易获得返回 OpenSSL.Core.Stack<OpenSSL.X509.X509Certificate> 的访问器 OpenSSL.X509.PKCS12.CACertificates。此外,当简单地阅读 pfx 时,我看到 CACertificates 是空白的,并且有两个成员,Count 和 IsReadOnly。当我尝试创建该对象时,我不允许设置 Count 和 IsReadOnly,因为它们是只读的。将第 4 个参数设置为 null 和 "" 也不起作用!我难住了。
示例在这里:https ://github.com/flaub/openssl-net/tree/master/test
任何帮助是极大的赞赏。在编程方面,我是一个极端的菜鸟,所以请放轻松。:-)