PFXファイルをX509Certificate2Collectionオブジェクトとして開くことにより、PFX内の証明書を反復処理できるはずです(そして、それぞれを選択した証明書ストアにインポートできます)。
X509Certificate2Collectionのドキュメントは次のとおりです。
http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2collection.aspx
MSDNは、コレクション内の各証明書を検査する方法について、そのドキュメントページにいくつかのサンプルコードを提供しています。
各証明書に関するCN/発行者/その他の情報がわかれば、それぞれを追加する必要のある証明書ストアを明確にする必要があります。そのためには、X509StoreクラスとStoreName列挙を使用して、開く/追加するストアを指定できます。
http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store.aspx
http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspx
同様のSOの質問に対する私の回答も参照してください。
c#でpfxファイルから証明書を取得する方法は?
その回答に関する最新のコメントの1つで述べたように、現在のユーザーのルートストア(名前/場所として「StoreName.Root」と「StoreLocation.CurrentUser」)に証明書をインポートしようとすると、ポップアップダイアログが表示されます。確認します。
これを解決するために、証明書のインポートメソッドにMS UIオートメーションコードを少し追加して、プロンプトで[OK]をクリックします。
または、コメント投稿者「CodeWarrior」が他のSO回答のコメントで述べているように、ポップアップダイアログを回避するには、CurrentUserではなくLocalMachineストアにルート証明書を配置してみてください。
サンプルコード:
string certPath = <YOUR PFX FILE PATH>;
string certPass = <YOUR PASSWORD>;
// Create a collection object and populate it using the PFX file
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certPath, certPass, X509KeyStorageFlags.PersistKeySet);
foreach (X509Certificate2 cert in collection)
{
Console.WriteLine("Subject is: '{0}'", cert.Subject);
Console.WriteLine("Issuer is: '{0}'", cert.Issuer);
// Import the certificate into an X509Store object
}