Exemplo n.º 1
0
        /// <summary>
        /// The method to be overriden in inheriting tasks.
        /// Throw an exception in case of an errror.
        /// </summary>
        protected override void ExecuteTask()
        {
            // Keyfile password
            var password = new SecureString();

            foreach (char c in BagGet(AttributeName.Password, ""))
            {
                password.AppendChar(c);
            }

            // Timestamping server
            string sTimestampServer   = BagGet(AttributeName.TimestampingServer, "");
            Uri    uriTimestampServer = string.IsNullOrEmpty(sTimestampServer) ? null : new Uri(sTimestampServer);

            if (uriTimestampServer == null)
            {
                Log.LogWarning("It would be better to specify the Timestamping Server Uri.");
            }

            // Sign each file
            foreach (ITaskItem item in BagGet <ITaskItem[]>(AttributeName.InputFiles))
            {
                SecurityUtilities.SignFile(GetStringValue(AttributeName.KeyFile), password, uriTimestampServer, item.GetMetadata("FullPath"));
            }
        }
Exemplo n.º 2
0
        internal static bool Sign(string file, Project project)
        {
            if (project.CertificateSource.Value is null)
            {
                return(false);
            }

            try
            {
                var certificateSource = project.CertificateSource.Value;
                var timestampUrl      = project.TimestampUrl.Value is null ? null : new Uri(project.TimestampUrl.Value, UriKind.Absolute);

                if (certificateSource.Length == 40 && Regex.IsMatch(certificateSource, "[a-fA-F0-9]*"))
                {
                    SecurityUtilities.SignFile(certificateSource, timestampUrl, file);
                }
                else
                {
                    SecurityUtilities.SignFile(Path.Combine(project.Source.Value, project.CertificateSource.Value), project.CertificatePassword.Value, timestampUrl, file);
                }

                return(true);
            }
            catch
            {
                throw new ApplicationException($"An error occurred signing the manifest. Check that all signature parameters are correct.");
            }
        }
        public void SignFile(string inputFileName, X509Certificate2 certificate, string timestampServer,
                             SignFileRequest signFileRequest, SignFileResponse signFileResponse)
        {
            SignFileResponseResult successResult = SignFileResponseResult.FileSigned;

            if (IsFileSigned(inputFileName))
            {
                if (signFileRequest.OverwriteSignature)
                {
                    UnsignFile(inputFileName);
                    successResult = SignFileResponseResult.FileResigned;
                }
                else
                {
                    signFileResponse.Result = SignFileResponseResult.FileAlreadySigned;
                    return;
                }
            }

            SecurityUtilities.SignFile(certificate, new Uri(timestampServer), inputFileName);

            signFileResponse.Result      = successResult;
            signFileResponse.FileContent = new FileStream(inputFileName, FileMode.Open, FileAccess.Read);
            signFileResponse.FileSize    = signFileResponse.FileContent.Length;
        }
Exemplo n.º 4
0
 public override bool Execute()
 {
     if (!NativeMethodsShared.IsWindows)
     {
         Log.LogErrorWithCodeFromResources("General.TaskRequiresWindows", nameof(SignFile));
         return(false);
     }
     try
     {
         SecurityUtilities.SignFile(
             CertificateThumbprint,
             TimestampUrl == null ? null : new Uri(TimestampUrl),
             SigningTarget.ItemSpec,
             TargetFrameworkVersion,
             TargetFrameworkIdentifier,
             DisallowMansignTimestampFallback);
         return(true);
     }
     catch (ArgumentException ex) when(ex.ParamName.Equals("certThumbprint"))
     {
         Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore");
         return(false);
     }
     catch (FileNotFoundException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", ex.FileName);
         return(false);
     }
     catch (ApplicationException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
     catch (WarningException ex)
     {
         Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", ex.Message.Trim());
         return(true);
     }
     catch (CryptographicException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
     catch (Win32Exception ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
     catch (UriFormatException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
 }
Exemplo n.º 5
0
 public override bool Execute()
 {
     try
     {
         SecurityUtilities.SignFile(CertificateThumbprint,
                                    TimestampUrl == null ? null : new Uri(TimestampUrl),
                                    SigningTarget.ItemSpec, TargetFrameworkVersion);
         return(true);
     }
     catch (ArgumentException ex)
     {
         if (ex.ParamName.Equals("certThumbprint"))
         {
             Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore");
             return(false);
         }
         else
         {
             throw;
         }
     }
     catch (FileNotFoundException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", ex.FileName);
         return(false);
     }
     catch (ApplicationException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
     catch (WarningException ex)
     {
         Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", ex.Message.Trim());
         return(true);
     }
     catch (CryptographicException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
     catch (Win32Exception ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
     catch (UriFormatException ex)
     {
         Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim());
         return(false);
     }
 }
Exemplo n.º 6
0
 public override bool Execute()
 {
     try
     {
         SecurityUtilities.SignFile(this.CertificateThumbprint, (this.TimestampUrl == null) ? null : new Uri(this.TimestampUrl), this.SigningTarget.ItemSpec);
         return(true);
     }
     catch (ArgumentException exception)
     {
         if (!exception.ParamName.Equals("certThumbprint"))
         {
             throw;
         }
         base.Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore", new object[0]);
         return(false);
     }
     catch (FileNotFoundException exception2)
     {
         base.Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", new object[] { exception2.FileName });
         return(false);
     }
     catch (ApplicationException exception3)
     {
         base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception3.Message.Trim() });
         return(false);
     }
     catch (WarningException exception4)
     {
         base.Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", new object[] { exception4.Message.Trim() });
         return(true);
     }
     catch (CryptographicException exception5)
     {
         base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception5.Message.Trim() });
         return(false);
     }
     catch (Win32Exception exception6)
     {
         base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception6.Message.Trim() });
         return(false);
     }
     catch (UriFormatException exception7)
     {
         base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception7.Message.Trim() });
         return(false);
     }
 }
Exemplo n.º 7
0
        private bool CreateManifests(string entryPoint, string baseUrl, List <PackageFileInfo> additionalFiles, List <string> filesToDelete)
        {
            string configFileName;
            string entryPointFilePath;
            ApplicationManifest appManifest;

            try
            {
                appManifest = CreateApplicationManifest(entryPoint, out configFileName, out entryPointFilePath);
            }
            catch (DuplicateAssemblyReferenceException ex)
            {
                Log.LogError("ClickOnce: {0}", ex.Message);
                return(false);
            }

            string appManifestFileName        = Path.GetFileName(appManifest.EntryPoint.SourcePath) + ".manifest";
            string deployManifestFileName     = Path.GetFileName(appManifest.EntryPoint.SourcePath) + ".application";
            string deployManifestTempFileName = Path.GetTempFileName();
            string appManifestTempFileName    = Path.GetTempFileName();

            ManifestWriter.WriteManifest(appManifest, appManifestTempFileName);
            SecurityUtilities.SignFile(Certificate.ItemSpec, GetCertPassword(), null, appManifestTempFileName);
            string         deploymentUrl  = BuildDeploymentUrl(deployManifestFileName, baseUrl);
            DeployManifest deployManifest = CreateDeployManifest(
                appManifest,
                appManifestTempFileName,
                appManifestFileName,
                deploymentUrl,
                entryPointFilePath);


            ManifestWriter.WriteManifest(deployManifest, deployManifestTempFileName);
            SecurityUtilities.SignFile(Certificate.ItemSpec, GetCertPassword(), null, deployManifestTempFileName);

            additionalFiles.Add(new PackageFileInfo(appManifestTempFileName, appManifestFileName));
            additionalFiles.Add(new PackageFileInfo(deployManifestTempFileName, deployManifestFileName));

            filesToDelete.Add(appManifestTempFileName);
            filesToDelete.Add(deployManifestTempFileName);
            if (ConfigFile != null && !string.IsNullOrEmpty(configFileName))
            {
                additionalFiles.Add(new PackageFileInfo(ConfigFile.ItemSpec, CombineWithWebsite ? AddDeploySuffix(configFileName) : configFileName));
            }

            return(true);
        }
Exemplo n.º 8
0
        static void Main(string[] args)
        {
            Arguments arguments = new Arguments();

            if (!arguments.Parse(args))
            {
                Console.WriteLine("Sha1SignFile");
                Console.WriteLine();
                Console.WriteLine("Use after Mage.exe to create a SHA1 signature with a SHA256 certificate");
                Console.WriteLine();
                Console.WriteLine("Arguments:");
                Console.WriteLine("-certThumbprint - Certificate thumbprint");
                Console.WriteLine("-filePath - File to sign");
                Console.WriteLine("-timestampUrl - Timestamp server address");
            }
            else
            {
                SecurityUtilities.SignFile(arguments.CertThumbprint, new Uri(arguments.TimestampUrl), arguments.FilePath, "v4.0");

                Console.WriteLine("Sha1SignFile successfully signed: {0}", arguments.FilePath);
            }
        }
        /// <summary>
        /// Sign the manifest with provided publisher certificate
        /// </summary>
        /// <param name="manifest">manifest to sign</param>
        /// <param name="certFilePath">Path to cert file</param>
        /// <param name="password">Password for cert file</param>
        public static void SignManifest(Manifest manifest, string certFilePath, string password)
        {
            // Make sure the entered cert file exists
            if (File.Exists(certFilePath))
            {
                // Construct cert object for cert
                X509Certificate2 cert;
                if (string.IsNullOrEmpty(password))
                {
                    cert = new X509Certificate2(certFilePath);
                }
                else
                {
                    cert = new X509Certificate2(certFilePath, password);
                }

                SecurityUtilities.SignFile(cert, null, manifest.SourcePath);
            }
            else
            {
                throw new ArgumentException("Invalid certificate file path");
            }
        }
Exemplo n.º 10
0
 /// <summary>
 /// Sign file with certificate.
 /// </summary>
 /// <param name="manifestPath">Path to manifest file.</param>
 /// <param name="timestampUrl">Timestamp server URL.</param>
 /// <param name="certificate">Certificate file reference.</param>
 public static void SignFile(string manifestPath, Uri timestampUrl, X509Certificate2 certificate)
 {
     SecurityUtilities.SignFile(certificate, timestampUrl, manifestPath);
 }