示例#1
0
 public ImportResult(
     CertStoreId storeId,
     IReadOnlyList <X509Certificate> added,
     IReadOnlyList <X509Certificate> removed)
 {
     StoreId = storeId;
     Added   = added;
     Removed = removed;
 }
示例#2
0
    ImportResult ImportToStore(CertStoreId storeId, X509CertificateCollection roots, X509Store store)
    {
        var addedResult   = new List <X509Certificate>();
        var removedResult = new List <X509Certificate>();

        var trusted = store.Certificates;

        Log("I already trust {0}, your new list has {1}", trusted.Count, roots.Count);
        foreach (var root in roots)
        {
            if (!trusted.Contains(root))
            {
                try
                {
                    store.Import(root);
                    Log("Certificate added: {0}", root.SubjectName);
                    addedResult.Add(root);
                }
                catch (Exception e)
                {
                    Log("Warning: Could not import {0}", root.SubjectName);
                    Log(e.ToString());
                }
            }
        }
        if (addedResult.Count > 0)
        {
            Log("{0} new root certificates were added to your trust store.", addedResult.Count);
        }

        var removed = new X509CertificateCollection();

        foreach (var trust in trusted)
        {
            if (!roots.Contains(trust))
            {
                removed.Add(trust);
                removedResult.Add(trust);
            }
        }
        if (removed.Count > 0)
        {
            Log("{0} previously trusted certificates were removed.", removed.Count);

            foreach (var old in removed)
            {
                store.Remove(old);
                Log("Certificate removed: {0}", old.SubjectName);
            }
        }
        Log("Import process completed.");

        return(new ImportResult(storeId, addedResult, removedResult));
    }