如何将多个.p12证书合并到一个.pfx文件中

时间:2016-09-19 02:42:25

标签: c# certificate x509certificate2

我有大量单个证书存储为扩展名为.p12的文件。我想将所有这些证书合并到一个.pfx文件中,以减少在客户端计算机上导入所有这些证书的工作量。 这是我尝试过的。它会创建文件,但导入.pfx文件时会出现问题。 Windows证书导入向导仅导入第一个证书,并在此之后忽略所有内容。我假设因为我尝试将它们组合起来的方式导致文件格式出错。我不确定这样做的正确方法。有任何想法吗?

private void btnCombineCerts_Click(object sender, EventArgs e)
{
    String dateString = DateTime.Now.ToString("yyyyMMdd");
    String timeString = DateTime.Now.ToString("hhmmssff");
    String path = Directory.GetCurrentDirectory() + @"\certs\CombinedCerts\";
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    List<X509Certificate2> certs = new List<X509Certificate2>();
    foreach(var certFile in fDialog.FileNames)
    {
        X509Certificate2 cert = new X509Certificate2(certFile);
        certs.Add(cert);
    }
    foreach(X509Certificate2 cert in certs)
    {                
        byte[] certStream = cert.Export(X509ContentType.Pfx);
        using (var stream = new FileStream(path + dateString + "CombinedCerts" + timeString + ".pfx", FileMode.Append))
        {
            stream.Write(certStream, 0, certStream.Length);
        }

    }
}

2 个答案:

答案 0 :(得分:2)

PFX固有地支持多个证书,但它不是像您所写的那样的顺序文件。我不知道UI会正确导入它,但如果所有内容都有私钥,它可能会。 X509Certificate2Collection的一个真正用途是它可以导出或导入。

for(int i =0; i<5; i++){

            JavascriptExecutor js = (JavascriptExecutor) driver;
            HashMap scrollObject = new HashMap();
            scrollObject.put("direction", "down");
            js.executeScript("mobile: scroll", scrollObject);

        }

答案 1 :(得分:0)

public X509Certificate2 Merge(List<X509Certificate2> certificates)
{
    var certs = new X509Certificate2Collection();

    foreach (var certFile in certificates)
    {
        certs.Add(new X509Certificate2(certFile));
    }

    byte[] data = certs.Export(X509ContentType.Pfx);

    X509Certificate2 newFile = new X509Certificate2(data);

    return newFile;
}