2016-09-19 41 views
2

私は多数の単一証明書を拡張子.p12のファイルとして保存しています。これらの証明書をすべて1つの.pfxファイルにまとめて、これらの証明書をクライアントマシンにインポートする作業を少なくしたいと考えています。 ここに私が試したことがあります。ファイルを作成しますが、.pfxファイルをインポートすると問題が発生します。 Windows証明書インポートウィザードは、最初の証明書のみをインポートし、それ以降はすべて無視します。私はそれらを組み合わせようとしている方法で、ファイルのフォーマットに何らかの問題があるので、私は仮定します。私はこれを行う正しい方法がわからない。何か案は?複数の.p12証明書を1つの.pfxファイルに結合する方法

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

PFXは本質的に複数の証明書をサポートしますが、あなたが書いたような順ファイルではありません。 UIがこれを適切にインポートするかどうかはわかりませんが、すべてが秘密鍵を持っていればおそらくそうなります。 X509Certificate2Collectionの本当の使い方は、エクスポートまたはインポートできることです。

var certs = new X509Certificate2Collection(); 

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

byte[] oneBigPfx = certs.Export(X509ContentType.Pfx); 
File.WriteAllBytes(filename, oneBigPfx); 
+0

これは完全に機能します。ありがとうございました。また、Exportメソッドにはパスワードのパラメータが追加されます。これは追加のボーナスです。 – smitty1

関連する問題