Example #1
0
        public void TestNoCertificatesThrowsError()
        {
            var emptyConfig = new SigningServerConfiguration();
            var error       = Assert.ThrowsException <InvalidConfigurationException>(() => new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider()));

            Assert.AreEqual(InvalidConfigurationException.NoValidCertificatesMessage, error.Message);
        }
Example #2
0
        public static void Setup(TestContext _)
        {
            _certificateHelper = new CertificateStoreHelper(CertificatePath, StoreName.My,
                                                            StoreLocation.LocalMachine);

            var configuration = new SigningServerConfiguration
            {
                Port            = 4711,
                TimestampServer = ConfigurationManager.AppSettings["TimestampServer"],
                Certificates    = new[]
                {
                    new CertificateConfiguration
                    {
                        Thumbprint    = _certificateHelper.Certificate.Thumbprint,
                        StoreName     = (StoreName)Enum.Parse(typeof(StoreName), _certificateHelper.Store.Name),
                        StoreLocation = _certificateHelper.Store.Location
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };

            File.WriteAllText("config.json", JsonConvert.SerializeObject(configuration));

            _service = new SigningServerService();
            _service.ConsoleStart();
        }
Example #3
0
        public void SignFile_NoAnonymousSigning_Fails()
        {
            var configuration = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Username      = "******",
                        Password      = "******",
                        Thumbprint    = _certificateHelper.Certificate.Thumbprint,
                        StoreName     = (StoreName)Enum.Parse(typeof(StoreName), _certificateHelper.Store.Name),
                        StoreLocation = _certificateHelper.Store.Location
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };

            var server = new Server.SigningServer(configuration, _emptySigningToolProvider);

            var testData = new MemoryStream(File.ReadAllBytes(Path.Combine(ExecutionDirectory, "TestFiles/unsigned/unsigned.exe")));
            var request  = new SignFileRequest
            {
                FileName    = "unsigned.exe",
                FileSize    = testData.Length,
                FileContent = testData
            };

            var response = server.SignFile(request);

            Assert.AreEqual(SignFileResponseResult.FileNotSignedUnauthorized, response.Result);
        }
 public SigningServer(SigningServerConfiguration configuration, ISigningToolProvider signingToolProvider)
 {
     if (configuration == null)
     {
         throw new ArgumentNullException(nameof(configuration));
     }
     SigningToolProvider = signingToolProvider;
     Initialize(configuration);
 }
Example #5
0
        public void InvalidWorkingDirectoryThrowsError()
        {
            var emptyConfig = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = "T:\\NotExisting"
            };
            var server = new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider());

            server.GetSupportedFileExtensions();
        }
Example #6
0
        public void RelativeWorkingDirectoryGetsCreated()
        {
            var config = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };
            var server = new Server.SigningServer(config, CreateEmptySigningToolProvider());

            Assert.IsTrue(Directory.Exists(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory)));
            Directory.Delete(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory), true);
        }
Example #7
0
        public void InvalidWorkingDirectoryThrowsError()
        {
            var emptyConfig = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2(CertificatePath, CertificatePassword)
                    }
                },
                WorkingDirectory = "T:\\NotExisting"
            };

            var exception = Assert.ThrowsException <InvalidConfigurationException>(() => new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider()));

            Assert.AreEqual(InvalidConfigurationException.CreateWorkingDirectoryFailedMessage, exception.Message);
        }
Example #8
0
        public void AbsoluteWorkingDirectoryGetsCreated()
        {
            var temp   = Path.Combine(Path.GetTempPath(), "WorkingDirectory");
            var config = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = temp
            };
            var server = new Server.SigningServer(config, CreateEmptySigningToolProvider());

            Assert.IsTrue(Directory.Exists(temp));
            Directory.Delete(temp, true);
        }
Example #9
0
        public static void Setup(TestContext _)
        {
            _certificateHelper = new CertificateStoreHelper(CertificatePath, StoreName.My,
                                                            StoreLocation.LocalMachine);

            _configuration = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Thumbprint    = _certificateHelper.Certificate.Thumbprint,
                        StoreName     = (StoreName)Enum.Parse(typeof(StoreName), _certificateHelper.Store.Name),
                        StoreLocation = _certificateHelper.Store.Location
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };

            _emptySigningToolProvider = new EnumerableSigningToolProvider(Enumerable.Empty <ISigningTool>());

            var simulateSigningTool = new Mock <ISigningTool>();

            simulateSigningTool.Setup(t => t.SupportedFileExtensions).Returns(new[] { "*" });
            simulateSigningTool.Setup(t => t.SupportedHashAlgorithms).Returns(new[] { "*" });
            simulateSigningTool.Setup(t => t.IsFileSigned(It.IsAny <string>())).Returns(true);
            simulateSigningTool.Setup(t => t.IsFileSupported(It.IsAny <string>())).Returns(true);
            simulateSigningTool.Setup(t => t.SignFile(It.IsAny <string>(), It.IsAny <X509Certificate2>(), It.IsAny <string>(), It.IsAny <SignFileRequest>(), It.IsAny <SignFileResponse>())).Callback(
                (string file, X509Certificate2 cert, string timestampserver, SignFileRequest request, SignFileResponse response) =>
            {
                response.Result      = SignFileResponseResult.FileSigned;
                var fs               = new FileStream(file, FileMode.Open, FileAccess.Read);
                response.FileContent = fs;
                response.FileSize    = fs.Length;
            });

            _simultateSigningToolProvider = new EnumerableSigningToolProvider(new[] { simulateSigningTool.Object });
        }
Example #10
0
 public void LoadCertificateFromStoreWorks()
 {
     using (var cert = new CertificateStoreHelper("Certificates/SigningServer.Test.pfx", StoreName.My,
                                                  StoreLocation.LocalMachine))
     {
         var emptyConfig = new SigningServerConfiguration
         {
             Certificates = new[]
             {
                 new CertificateConfiguration
                 {
                     Thumbprint    = cert.Certificate.Thumbprint,
                     StoreName     = (StoreName)Enum.Parse(typeof(StoreName), cert.Store.Name),
                     StoreLocation = cert.Store.Location,
                 }
             },
             WorkingDirectory = "WorkingDirectory"
         };
         var server = new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider());
         Assert.AreEqual(1, server.Configuration.Certificates.Length);
         Assert.AreEqual(emptyConfig.Certificates[0].Thumbprint, server.Configuration.Certificates[0].Certificate.Thumbprint);
     }
 }
Example #11
0
        public void RelativeWorkingDirectoryGetsCleaned()
        {
            var config = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };

            Directory.CreateDirectory("WorkingDirectory");
            File.WriteAllText("WorkingDirectory/test.txt", "test");

            var server = new Server.SigningServer(config, CreateEmptySigningToolProvider());

            Assert.IsTrue(Directory.Exists(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory)));

            Assert.AreEqual(0, Directory.GetFiles("WorkingDirectory").Length);
            Directory.Delete(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory), true);
        }
Example #12
0
 public void TestNoCertificatesThrowsError()
 {
     var emptyConfig = new SigningServerConfiguration();
     var server      = new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider());
 }
        private void Initialize(SigningServerConfiguration configuration)
        {
            Configuration = configuration;

            Log.Info("Validating configuration");
            Configuration = new SigningServerConfiguration
            {
                LegacyPort       = configuration.LegacyPort,
                Port             = configuration.Port,
                TimestampServer  = configuration.TimestampServer ?? "",
                WorkingDirectory = configuration.WorkingDirectory ?? "",
                HardwareCertificateUnlockIntervalInSeconds =
                    configuration.HardwareCertificateUnlockIntervalInSeconds > 0
                        ? configuration.HardwareCertificateUnlockIntervalInSeconds
                        : 60 * 60
            };

            _hardwareCertificateUnlocker =
                new HardwareCertificateUnlocker(
                    TimeSpan.FromSeconds(Configuration.HardwareCertificateUnlockIntervalInSeconds));

            var list = new List <CertificateConfiguration>();

            if (configuration.Certificates != null)
            {
                foreach (var certificateConfiguration in configuration.Certificates)
                {
                    if (certificateConfiguration.Certificate != null)
                    {
                        list.Add(certificateConfiguration);
                        continue;
                    }

                    try
                    {
                        Log.Info("Loading certificate '{0}'", certificateConfiguration.Thumbprint);
                        certificateConfiguration.LoadCertificate(_hardwareCertificateUnlocker);
                        list.Add(certificateConfiguration);
                    }
                    catch (CryptographicException e)
                    {
                        Log.Error(e, $"Certificate for thumbprint {certificateConfiguration.Thumbprint} in {certificateConfiguration.StoreLocation}/{certificateConfiguration.StoreName} coult not be loaded: 0x{e.HResult:X}");
                    }
                    catch (Exception e)
                    {
                        Log.Error(e, $"Certificate loading failed: {e.Message}");
                    }
                }
            }

            if (list.Count == 0)
            {
                throw new InvalidConfigurationException(InvalidConfigurationException.NoValidCertificatesMessage);
            }


            Configuration.Certificates = list.ToArray();

            try
            {
                if (Directory.Exists(Configuration.WorkingDirectory))
                {
                    Log.Info("Working directory exists, cleaning");
                    Directory.Delete(Configuration.WorkingDirectory, true);
                }
                Directory.CreateDirectory(Configuration.WorkingDirectory);
                Log.Info("Working directory created");
            }
            catch (Exception e)
            {
                throw new InvalidConfigurationException(InvalidConfigurationException.CreateWorkingDirectoryFailedMessage, e);
            }

            Log.Info("Working directory: {0}", Configuration.WorkingDirectory);
            Log.Info("Certificates loaded: {0}", list.Count);
        }