C# OpenSSL.NET创建PFX

C# OpenSSL.NET创建PFX,c#,openssl,C#,Openssl,我已经想了好几天了。我已经放弃了。我正在尝试从CA的证书和私钥PEM文件创建pfx。我能够创建证书和密钥,但现在我无法在OpenSSL.X509.PKCS12中找到最后一个参数。以下是我所拥有的: private void btnCreatePFX_Click(object sender, EventArgs e) { string password = "p@ssw0rd"; string key_path = @"certs\ca_key.ke

我已经想了好几天了。我已经放弃了。我正在尝试从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)
    }
private void btnCreatePFX_单击(对象发送者,事件参数e)
{
字符串密码=”p@ssw0rd";
字符串key_path=@“certs\ca_key.key”;
字符串cert_path=@“certs\ca_cert.crt”;
字符串k=File.ReadAllText(键路径);
字符串c=File.ReadAllText(证书路径);
OpenSSL.Core.BIO key_BIO=新的OpenSSL.Core.BIO(k);
OpenSSL.Core.BIO cert_BIO=新的OpenSSL.Core.BIO(c);
OpenSSL.Crypto.CryptoKey key=OpenSSL.Crypto.CryptoKey.FromPrivateKey(k,“”);
OpenSSL.X509.X509证书证书证书=新的OpenSSL.X509.X509证书(证书);
//OpenSSL.Core.Stack hmm=新的OpenSSL.Core.Stack();

var pfx=new OpenSSL.X509.PKCS12(密码、密钥、证书、null);//您需要一个新的
OpenSSL.Core.Stack
实例。在您的示例中,行中已经有一个:

//OpenSSL.Core.Stack hmm=new OpenSSL.Core.Stack();

因此,您应该能够通过取消对该行的注释并将
hmm
作为第四个参数原样传递来创建PKCS12实例

Stack
参数用于将多个证书(和密钥)包含到单个文件中。通常仅包含作为验证链一部分的证书,例如在
X509Certificate cert
参数中指定的证书的任何中间证书或CA证书

PKCS12实例上的
CACertificates
属性是已添加到pfx文件的证书堆栈。该属性为空,因为尚未向堆栈中添加任何证书。您可以使用
堆栈
实例上的
.add(X509Certificate)
方法添加其他证书


您需要在
堆栈
实例上调用
Dispose()
(或使用(…)
块将其包装在
中),然后它才会超出范围。

您需要一个新的
OpenSSL.Core.Stack
实例。在您的示例中,行中已经有一个这样的实例:

//OpenSSL.Core.Stack hmm=new OpenSSL.Core.Stack();

因此,您应该能够通过取消对该行的注释并将
hmm
作为第四个参数原样传递来创建PKCS12实例

Stack
参数用于将多个证书(和密钥)包含到单个文件中。通常仅包含作为验证链一部分的证书,例如在
X509Certificate cert
参数中指定的证书的任何中间证书或CA证书

PKCS12实例上的
CACertificates
属性是已添加到pfx文件的证书堆栈。该属性为空,因为尚未向堆栈中添加任何证书。您可以使用
堆栈
实例上的
.add(X509Certificate)
方法添加其他证书

您需要在
堆栈
实例上调用
Dispose()
(或使用(…)
块将其包装在
中),然后它才会超出范围