Пример #1
0
 private static void RunTask(FullTest ft, string address, int sslPort, ReportAggregator aggregator, SSLTestArgs args)
 {
     try {
         Report rp = Run(ft, address, sslPort, args, @"raw_results\", "_" + address + "_" + sslPort);
         Report.UpdateReportAggregator(aggregator, rp);
         aggregator.IncrementScanCounter();
         Console.WriteLine("Done testing {0}:{1}\n", address, sslPort);
     } catch (Exception e) {
         Console.WriteLine("Failed to test {0}:{1} due to {2}", address, sslPort, e.Message);
     }
 }
Пример #2
0
 private static void InspectCerts(ReportAggregator aggregator, Report report, string serverUnderTest)
 {
     foreach (var x509Chain in report.chains.Values)
     {
         int n = x509Chain.Elements.Length;
         for (int i = 0; i < n; i++)
         {
             X509Cert xc = x509Chain.ElementsRev[0];
             if (xc != null && xc.ValidTo.CompareTo(DateTime.Now) < 0)
             {
                 aggregator.AddOverduedCertificate(serverUnderTest, xc.ValidTo);
                 return;
             }
         }
     }
 }
Пример #3
0
        private static bool StartInstances(XmlDocument xmlDoc, out TaskCreator taskCreator, out TaskDistributor taskDistributor,
                                           out ReportAggregator reportAggregator, out IncentiveEngine incentiveEngine, out Repository repository,
                                           out TransactionNode transactionNode)
        {
            taskCreator      = null;
            taskDistributor  = null;
            reportAggregator = null;
            incentiveEngine  = null;
            repository       = null;
            transactionNode  = null;
            int     port;
            string  serverMgrURL;
            string  repositoryURL      = null;
            string  transactionNodeURL = null;
            XmlNode xmlNode;

            try
            {
                xmlNode = xmlDoc.GetElementsByTagName(Global.SERVER_MANAGER_NAME)[0];
                if (xmlNode != null)
                {
                    serverMgrURL = $"tcp://{xmlNode.Attributes["hostName"].Value}:{xmlNode.Attributes["port"].Value}/{Global.SERVER_MANAGER_NAME}";
                }
                else
                {
                    Console.WriteLine("Server Manager Parameters are not defined in the XML!");
                    return(false);
                }
                Console.WriteLine("[SERVER MANAGER] - Node Started");
                Console.WriteLine("----------------------------" + Environment.NewLine);

                /*********REPOSITORY**************/
                xmlNode = xmlDoc.GetElementsByTagName(Global.REPOSITORY_NAME)[0];
                if (xmlNode != null)
                {
                    repositoryURL = $"tcp://{xmlNode.Attributes["hostName"].Value}:{xmlNode.Attributes["port"].Value}/{Global.REPOSITORY_NAME}";
                    int.TryParse(xmlNode.Attributes["port"].Value, out port);
                    repository = new Repository(xmlNode.Attributes["hostName"].Value, port, Global.REPOSITORY_NAME);
                }

                /**************TRANSACTION NODE********/
                xmlNode = xmlDoc.GetElementsByTagName(Global.TRANSACTION_NODE_NAME)[0];
                if (xmlNode != null)
                {
                    int.TryParse(xmlNode.Attributes["port"].Value, out port);
                    transactionNode = new TransactionNode(xmlNode.Attributes["hostName"].Value, port, Global.TRANSACTION_NODE_NAME);

                    transactionNodeURL = $"tcp://{xmlNode.Attributes["hostName"].Value}:{xmlNode.Attributes["port"].Value}/{Global.TRANSACTION_NODE_NAME}";
                }

                /**************TASK CREATOR********/
                xmlNode = xmlDoc.GetElementsByTagName(Global.TASK_CREATOR_NAME)[0];
                if (xmlNode != null)
                {
                    int.TryParse(xmlNode.Attributes["port"].Value, out port);
                    taskCreator = new TaskCreator(xmlNode.Attributes["hostName"].Value, port, Global.TASK_CREATOR_NAME);
                }
                /***********TASK DISTRIBUTOR********/
                xmlNode = xmlDoc.GetElementsByTagName(Global.TASK_DISTRIBUTOR_NAME)[0];
                if (xmlNode != null)
                {
                    int.TryParse(xmlNode.Attributes["port"].Value, out port);
                    taskDistributor = new TaskDistributor(xmlNode.Attributes["hostName"].Value, port, Global.TASK_DISTRIBUTOR_NAME);
                }
                /*********REPORT AGGREGATOR**********/
                xmlNode = xmlDoc.GetElementsByTagName(Global.REPORT_AGGREGATOR_NAME)[0];
                if (xmlNode != null)
                {
                    int.TryParse(xmlNode.Attributes["port"].Value, out port);
                    reportAggregator = new ReportAggregator(xmlNode.Attributes["hostName"].Value, port, Global.REPORT_AGGREGATOR_NAME);
                }
                /***********INCENTIVE ENGINE********/
                xmlNode = xmlDoc.GetElementsByTagName(Global.INCENTIVE_ENGINE_NAME)[0];
                if (xmlNode != null)
                {
                    int.TryParse(xmlNode.Attributes["port"].Value, out port);
                    incentiveEngine = new IncentiveEngine(xmlNode.Attributes["hostName"].Value, port, Global.INCENTIVE_ENGINE_NAME,
                                                          repositoryURL, transactionNodeURL);
                }
                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(false);
            }
        }
Пример #4
0
//    private static SSLTestArgs _testArgs = new SSLTestArgs(new List<string>());

    static void Process(string[] args)
    {
        FullTest    ft        = new FullTest();
        SSLTestArgs _testArgs = new SSLTestArgs(new List <string>());

        for (int i = 0; i < args.Length; i++)
        {
            string a = args[i];
            switch (a.ToLowerInvariant())
            {
            case "-h":
            case "-help":
            case "--help":
                Usage();
                break;

            case "-v":
            case "--verbose":
                ft.Verbose = true;
                break;

            case "-sni":
            case "--sni":
                if (++i >= args.Length)
                {
                    Usage();
                }
                ft.ExplicitSNI = args[i];
                break;

            case "-all":
            case "--all-suites":
                ft.AllSuites = true;
                break;

            case "-min":
            case "--min-version":
                if (++i >= args.Length)
                {
                    Usage();
                }
                ft.MinVersion = ParseVersion(args[i]);
                if (ft.MinVersion < M.SSLv20 ||
                    ft.MinVersion > M.TLSv12)
                {
                    Usage();
                }
                break;

            case "-max":
            case "--max-version":
                if (++i >= args.Length)
                {
                    Usage();
                }
                ft.MaxVersion = ParseVersion(args[i]);
                if (ft.MaxVersion < M.SSLv20 ||
                    ft.MaxVersion > M.TLSv12)
                {
                    Usage();
                }
                break;

            case "-certs":
            case "--with-certificates":
                _testArgs.WithCerts = true;
                break;

            case "-prox":
            case "--proxy":
                if (++i >= args.Length)
                {
                    Usage();
                }
                _testArgs.ProxString = args[i];
                break;

            case "-proxssl":
            case "--proxy-ssl":
                ft.ProxSSL = true;
                break;

            case "-ec":
            case "--with-ec-ext":
                ft.AddECExt = true;
                break;

            case "-text":
            case "--text-output":
                if (++i >= args.Length)
                {
                    Usage();
                }
                _testArgs.TextOut = args[i];
                break;

            case "-json":
            case "--json-output":
                if (++i >= args.Length)
                {
                    Usage();
                }
                _testArgs.JsonOut = args[i];
                break;

            case "-ar":
            case "--address-range":
                _testArgs.MultiAddr = true;
                break;

            case "-ap":
            case "--all-ports":
                _testArgs.IterateOverAllSslPorts = true;
                break;

            default:
                if (a.Length > 0 && a[0] == '-')
                {
                    Usage();
                }
                _testArgs.R.Add(a);
                break;
            }
        }
        args = _testArgs.R.ToArray();
        if (args.Length == 0 || args.Length > 2)
        {
            Usage();
        }

        string serverName = args[0];
        int    port       = -1;

        if (args.Length == 2)
        {
            try
            {
                port = Int32.Parse(args[1]);
            }
            catch (Exception)
            {
                Usage();
            }
        }

        ReportAggregator aggregator = new ReportAggregator();

        aggregator.SetSubnet(serverName);

        if (!_testArgs.MultiAddr)
        {
            Report.UpdateReportAggregator(aggregator, Run(ft, serverName, port, _testArgs));
        }
        else
        {
            IpRange           range          = new IpRange(serverName);
            IpRangeEnumerator enumerator     = new IpRangeEnumerator();
            SslPortEnumerator portEnumerator = new SslPortEnumerator();
            Console.WriteLine("Starting test...");

            Directory.CreateDirectory("raw_results");
            foreach (var address in enumerator.GetIPRange(range))
            {
                RunTask(ft, address, 443, aggregator, _testArgs);
            }
            ZipFile.CreateFromDirectory("raw_results", "raw_results_" + serverName.Replace("/", "_") + ".zip");
            Directory.Delete("raw_results", true);
        }

        aggregator.SaveCsv();
        aggregator.SaveCerts();
    }
 public LiquidityReportService(ReportAggregator aggregator, DatabaseContextFactory contextFactory)
 {
     _aggregator     = aggregator;
     _contextFactory = contextFactory;
 }
Пример #6
0
    public static void UpdateReportAggregator(ReportAggregator aggregator, Report report)
    {
        String serverUnderTest = $"{report.ConnName}:{report.ConnPort}";

        if (report.SSLv2Chain != null)
        {
            aggregator.AddSsl2Cert(serverUnderTest, report.SSLv2Chain);
            X509Cert xc = report.SSLv2Chain.ElementsRev[0];
            if (xc != null && xc.ValidTo.CompareTo(DateTime.Now) < 0)
            {
                aggregator.AddOverduedCertificate(serverUnderTest, xc.ValidTo);
            }
        }

        if (report.ssl2Suites != null && report.ssl2Suites.Length > 0)
        {
            aggregator.AddSuportedSslVersion(M.VersionString(M.SSLv20));
            foreach (int s in report.ssl2Suites)
            {
                aggregator.AddSupportedCipherSuite(CipherSuite.ToNameV2(s));
            }
        }

        aggregator.AddSsl3Certs(serverUnderTest, report.chains.Values);
        InspectCerts(aggregator, report, serverUnderTest);

        foreach (int v in report.suites.Keys)
        {
            aggregator.AddSuportedSslVersion(M.VersionString(v));
            SupportedCipherSuites scs = report.suites[v];
            if (scs.PrefClient)
            {
                aggregator.AddCipherSuiteSelectionMode("uses client preferences");
            }
            else if (scs.PrefServer)
            {
                aggregator.AddCipherSuiteSelectionMode("enforce server preferences");
            }
            else
            {
                aggregator.AddCipherSuiteSelectionMode("complex");
            }
            foreach (int s in scs.Suites)
            {
                CipherSuite cs;
                string      strength;
                string      fsf;
                string      anon;
                string      kt;
                if (CipherSuite.ALL.TryGetValue(s, out cs))
                {
                    strength = cs.Strength.ToString();
                    fsf      = cs.HasForwardSecrecy ? "f" : "-";
                    anon     = cs.IsAnonymous ? "A" : "-";
                    kt       = cs.ServerKeyType;
                }
                else
                {
                    strength = "?";
                    fsf      = "?";
                    anon     = "?";
                    kt       = "?";
                }
                aggregator.AddSupportedCipherSuite($"{strength}{fsf}{anon} (key: {kt,4})  {CipherSuite.ToName(s)}");
            }
        }

        foreach (var warning in report.Warnings)
        {
            aggregator.AddWarning(warning.Value);
        }
    }