Exemple #1
0
        static ArrayList LoadCRLs(string filename)
        {
            X509Crl   crl  = null;
            ArrayList list = new ArrayList();

            switch (Path.GetExtension(filename).ToUpper())
            {
            case ".P7B":
            case ".SPC":
                SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(filename);
                list.AddRange(spc.Crls);
                spc = null;
                break;

            case ".CRL":
                using (FileStream fs = File.OpenRead(filename)) {
                    byte[] data = new byte [fs.Length];
                    fs.Read(data, 0, data.Length);
                    crl = new X509Crl(data);
                }
                list.Add(crl);
                break;

            default:
                Console.WriteLine("Unknown file extension: {0}",
                                  Path.GetExtension(filename));
                break;
            }
            return(list);
        }
        public void ReadNavy()
        {
            WriteBuffer(navy, false, false, false);
            SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(testfile);

            Assert.AreEqual(3, spc.Certificates.Count, "navy.Certificates");
            Assert.AreEqual(2, spc.Crls.Count, "navy.Crl");
        }
        public void ReadCRLOnly()
        {
            WriteBuffer(crlonly, false, false, false);
            SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(testfile);

            Assert.AreEqual(0, spc.Certificates.Count, "crlonly.Certificates");
            Assert.AreEqual(1, spc.Crls.Count, "crlonly.Crl");
        }
        public void ReadCertificateOnly_Base64Unicode()
        {
            WriteBuffer(certonly, true, true, false);
            SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(testfile);

            Assert.AreEqual(1, spc.Certificates.Count, "certonly.Certificates");
            Assert.AreEqual(0, spc.Crls.Count, "certonly.Crl");
        }
Exemple #5
0
        static X509CertificateCollection LoadCertificates(string filename)
        {
            X509Certificate           x509 = null;
            X509CertificateCollection coll = new X509CertificateCollection();

            switch (Path.GetExtension(filename).ToUpper())
            {
            case ".P7B":
            case ".SPC":
                SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(filename);
                coll.AddRange(spc.Certificates);
                spc = null;
                break;

            case ".CER":
            case ".CRT":
                using (FileStream fs = File.OpenRead(filename)) {
                    byte[] data = new byte [fs.Length];
                    fs.Read(data, 0, data.Length);
                    if (data [0] != 0x30)
                    {
                        // maybe it's ASCII PEM base64 encoded ?
                        data = PEM("CERTIFICATE", data);
                    }
                    if (data != null)
                    {
                        x509 = new X509Certificate(data);
                    }
                }
                if (x509 != null)
                {
                    coll.Add(x509);
                }
                break;

            case ".P12":
            case ".PFX":
                // TODO - support PKCS12 with passwords
                PKCS12 p12 = PKCS12.LoadFromFile(filename);
                coll.AddRange(p12.Certificates);
                p12 = null;
                break;

            default:
                Console.WriteLine("Unknown file extension: {0}",
                                  Path.GetExtension(filename));
                break;
            }
            return(coll);
        }
        public void CompareCRLOnly()
        {
            WriteBuffer(crlonly, false, false, false);
            SoftwarePublisherCertificate spc    = SoftwarePublisherCertificate.CreateFromFile(testfile);
            SoftwarePublisherCertificate newspc = new SoftwarePublisherCertificate();

            newspc.Crls.Add(spc.Crls [0]);
            byte[] newcrlonly = newspc.GetBytes();
            Assert.AreEqual(crlonly, newcrlonly, "crlonly.compare");

            SoftwarePublisherCertificate newerspc = new SoftwarePublisherCertificate(newcrlonly);

            Assert.AreEqual(0, newerspc.Certificates.Count, "crlonly.Certificates");
            Assert.AreEqual(1, newerspc.Crls.Count, "crlonly.Crl");
        }
Exemple #7
0
        static private X509CertificateCollection GetCertificates(string spcfile)
        {
            if (spcfile == null)
            {
                Console.WriteLine("Missing SPC (certificate) file.");
                return(null);
            }
            if (!File.Exists(spcfile))
            {
                Console.WriteLine("Couldn't find '{0}' file.", spcfile);
                return(null);
            }

            SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(spcfile);

            return(spc.Certificates);
        }
        // methods

        public void Open(string name, string location, bool readOnly, bool createIfNonExisting, bool includeArchives)
        {
            _name             = name;
            _location         = location;
            _readOnly         = readOnly;
            _createIfRequired = createIfNonExisting;
            _includeArchives  = includeArchives;
            _saveOnClose      = false;

            if (File.Exists(_name))
            {
                _spc = SoftwarePublisherCertificate.CreateFromFile(_name);
            }
            else if (_createIfRequired)
            {
                _spc         = new SoftwarePublisherCertificate();
                _saveOnClose = true;
            }
        }
Exemple #9
0
        static int Process(string[] args)
        {
            int nargs = args.Length - 1;

            if (nargs < 1)
            {
                error = "At least one input and output files must be specified";
                return(1);
            }

            string output = args [nargs];
            SoftwarePublisherCertificate spc = new SoftwarePublisherCertificate();

            for (int i = 0; i < args.Length - 1; i++)
            {
                switch (Path.GetExtension(args[i]).ToLower())
                {
                case ".cer":
                case ".crt":
                    spc.Certificates.Add(new X509Certificate(GetFile(args[i])));
                    break;

                case ".crl":
                    spc.Crls.Add(GetFile(args[i]));
                    break;

                default:
                    error = "Unknown file extension : " + args[i];
                    return(1);
                }
            }

            using (FileStream fs = File.Open(output, FileMode.Create, FileAccess.Write))
            {
                byte[] data = spc.GetBytes();
                fs.Write(data, 0, data.Length);
                fs.Close();
            }
            return(0);
        }
        public void CompareReadNavy()
        {
            WriteBuffer(navy, false, false, false);
            SoftwarePublisherCertificate spc    = SoftwarePublisherCertificate.CreateFromFile(testfile);
            SoftwarePublisherCertificate newspc = new SoftwarePublisherCertificate();

            foreach (MSX.X509Certificate x in spc.Certificates)
            {
                newspc.Certificates.Add(x);
            }
            foreach (byte[] crl in spc.Crls)
            {
                newspc.Crls.Add(crl);
            }
            byte[] newnavy = newspc.GetBytes();
            Assert.AreEqual(navy, newnavy, "navy.compare");

            SoftwarePublisherCertificate newerspc = new SoftwarePublisherCertificate(newnavy);

            Assert.AreEqual(3, newerspc.Certificates.Count, "navy.Certificates");
            Assert.AreEqual(2, newerspc.Crls.Count, "navy.Crl");
        }
Exemple #11
0
        static int Process()
        {
            X509CertificateCollection roots = DecodeCollection();

            if (roots == null)
            {
                return(1);
            }
            else if (roots.Count == 0)
            {
                WriteLine("No certificates were found.");
                return(0);
            }

            if (pkcs7filename != null)
            {
                SoftwarePublisherCertificate pkcs7 = new SoftwarePublisherCertificate();
                pkcs7.Certificates.AddRange(roots);

                WriteLine("Saving root certificates into '{0}' file...", pkcs7filename);
                using (FileStream fs = File.OpenWrite(pkcs7filename)) {
                    byte[] data = pkcs7.GetBytes();
                    fs.Write(data, 0, data.Length);
                    fs.Close();
                }
            }

            if (import)
            {
                WriteLine("Importing certificates into {0} store...",
                          machine ? "machine" : "user");

                X509Stores stores = (machine ? X509StoreManager.LocalMachine : X509StoreManager.CurrentUser);
                X509CertificateCollection trusted = stores.TrustedRoot.Certificates;
                int additions = 0;
                foreach (X509Certificate root in roots)
                {
                    if (!trusted.Contains(root))
                    {
                        if (!confirmAddition || AskConfirmation("add", root))
                        {
                            stores.TrustedRoot.Import(root);
                            if (confirmAddition)
                            {
                                WriteLine("Certificate added.{0}", Environment.NewLine);
                            }
                            additions++;
                        }
                    }
                }
                if (additions > 0)
                {
                    WriteLine("{0} new root certificates were added to your trust store.", additions);
                }

                X509CertificateCollection removed = new X509CertificateCollection();
                foreach (X509Certificate trust in trusted)
                {
                    if (!roots.Contains(trust))
                    {
                        removed.Add(trust);
                    }
                }
                if (removed.Count > 0)
                {
                    if (confirmRemoval)
                    {
                        WriteLine("{0} previously trusted certificates were not part of the update.", removed.Count);
                    }
                    else
                    {
                        WriteLine("{0} previously trusted certificates were removed.", removed.Count);
                    }

                    foreach (X509Certificate old in removed)
                    {
                        if (!confirmRemoval || AskConfirmation("remove", old))
                        {
                            stores.TrustedRoot.Remove(old);
                            if (confirmRemoval)
                            {
                                WriteLine("Certificate removed.{0}", Environment.NewLine);
                            }
                        }
                    }
                }
                WriteLine("Import process completed.{0}", Environment.NewLine);
            }
            return(0);
        }
Exemple #12
0
        static X509CertificateCollection LoadCertificates(string filename, string password, bool verbose)
        {
            X509Certificate           x509 = null;
            X509CertificateCollection coll = new X509CertificateCollection();

            switch (Path.GetExtension(filename).ToUpper())
            {
            case ".P7B":
            case ".SPC":
                SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(filename);
                coll.AddRange(spc.Certificates);
                spc = null;
                break;

            case ".CER":
            case ".CRT":
                using (FileStream fs = File.OpenRead(filename)) {
                    byte[] data = new byte [fs.Length];
                    fs.Read(data, 0, data.Length);
                    if (data [0] != 0x30)
                    {
                        // maybe it's ASCII PEM base64 encoded ?
                        data = PEM("CERTIFICATE", data);
                    }
                    if (data != null)
                    {
                        x509 = new X509Certificate(data);
                    }
                }
                if (x509 != null)
                {
                    coll.Add(x509);
                }
                break;

            case ".P12":
            case ".PFX":
                PKCS12 p12 = password == null?PKCS12.LoadFromFile(filename)
                                 : PKCS12.LoadFromFile(filename, password);

                X509CertificateCollection tmp = new X509CertificateCollection(p12.Certificates);

                for (int i = 0; i != p12.Keys.Count; i++)
                {
                    X509Certificate          cert = p12.Certificates[i];
                    RSACryptoServiceProvider pk   = p12.Keys[i] as RSACryptoServiceProvider;

                    if (pk == null || pk.PublicOnly)
                    {
                        continue;
                    }

                    if (verbose)
                    {
                        Console.WriteLine("Found key for certificate: {0}", cert.SubjectName);
                    }

                    tmp[0].RSA = pk;
                }
                coll.AddRange(tmp);
                p12 = null;
                break;

            default:
                Console.WriteLine("Unknown file extension: {0}",
                                  Path.GetExtension(filename));
                break;
            }
            return(coll);
        }
Exemple #13
0
        static int Process()
        {
            ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => {
                if (sslPolicyErrors != System.Net.Security.SslPolicyErrors.None)
                {
                    Console.WriteLine("WARNING: Downloading the trusted certificate list couldn't be done securely (error: {0}), continuing anyway. If you're using mozroots to bootstrap Mono's trust store on a clean system this might be OK, otherwise it could indicate a network intrusion. Please ensure you're using a trusted network or move to cert-sync.", sslPolicyErrors);
                }

                // this is very bad, but on a clean system without an existing trust store we don't really have a better option
                return(true);
            };

            X509CertificateCollection roots = DecodeCollection();

            if (roots == null)
            {
                return(1);
            }
            else if (roots.Count == 0)
            {
                WriteLine("No certificates were found.");
                return(0);
            }

            if (pkcs7filename != null)
            {
                SoftwarePublisherCertificate pkcs7 = new SoftwarePublisherCertificate();
                pkcs7.Certificates.AddRange(roots);

                WriteLine("Saving root certificates into '{0}' file...", pkcs7filename);
                using (FileStream fs = File.OpenWrite(pkcs7filename)) {
                    byte[] data = pkcs7.GetBytes();
                    fs.Write(data, 0, data.Length);
                    fs.Close();
                }
            }

            if (import)
            {
                WriteLine("Importing certificates into {0} store...",
                          machine ? "machine" : "user");

                X509Stores stores = (machine ? X509StoreManager.LocalMachine : X509StoreManager.CurrentUser);
                X509CertificateCollection trusted = stores.TrustedRoot.Certificates;
                int additions = 0;
                foreach (X509Certificate root in roots)
                {
                    if (!trusted.Contains(root))
                    {
                        if (!confirmAddition || AskConfirmation("add", root))
                        {
                            stores.TrustedRoot.Import(root);
                            if (confirmAddition)
                            {
                                WriteLine("Certificate added.{0}", Environment.NewLine);
                            }
                            additions++;
                        }
                    }
                }
                if (additions > 0)
                {
                    WriteLine("{0} new root certificates were added to your trust store.", additions);
                }

                X509CertificateCollection removed = new X509CertificateCollection();
                foreach (X509Certificate trust in trusted)
                {
                    if (!roots.Contains(trust))
                    {
                        removed.Add(trust);
                    }
                }
                if (removed.Count > 0)
                {
                    if (confirmRemoval)
                    {
                        WriteLine("{0} previously trusted certificates were not part of the update.", removed.Count);
                    }
                    else
                    {
                        WriteLine("{0} previously trusted certificates were removed.", removed.Count);
                    }

                    foreach (X509Certificate old in removed)
                    {
                        if (!confirmRemoval || AskConfirmation("remove", old))
                        {
                            stores.TrustedRoot.Remove(old);
                            if (confirmRemoval)
                            {
                                WriteLine("Certificate removed.{0}", Environment.NewLine);
                            }
                        }
                    }
                }
                WriteLine("Import process completed.{0}", Environment.NewLine);
            }
            return(0);
        }
 public void CreateFromFile_Null()
 {
     SoftwarePublisherCertificate spc = SoftwarePublisherCertificate.CreateFromFile(null);
 }
 public void Constructor_BadOid()
 {
     byte[] bad = (byte[])certonly.Clone();
     bad [9] -= 1;
     SoftwarePublisherCertificate spc = new SoftwarePublisherCertificate(bad);
 }
 public void Constructor_Null()
 {
     SoftwarePublisherCertificate spc = new SoftwarePublisherCertificate(null);
 }