Como posso assinar digitalmente um executável?

Estou a codificar software que requer acesso administrativo. Quando aparece uma janela do UAC, ela mostra um popup diferente para o software assinado digitalmente do que o software não assinado. Acredito que assinar digitalmente o meu software permitiria aos utilizadores confiarem mais facilmente no meu software. Custa milhares de dólares assinar software digitalmente, ou é gratuito? Há uma maneira simples de o fazer? Eu procurei em torno do Google e tudo o que eu recebo é como assinar arquivos PHP, XML e PDF, que não é o que eu quero. Eu preciso assina o meu executável de software.

Acabei de ver algo sobre a sigtool.exe? Esta é a direcção certa? E aqueles complicados ?ficheiros pfx e Authenticode ou não?

Author: Artjom B., 2010-06-27

4 answers

Como mencionado nas outras respostas, você terá primeiro de comprar um certificado adequado para a assinatura de código. Isto vai custar algumas centenas de dólares, nem perto de mil. Quando renovei o certificado da minha empresa com a Globalsign recentemente, houve também uma investigação para verificar se a empresa era legítima - porque usei um número de telemóvel para o processo de Registo, eles queriam uma carta do contabilista da empresa para verificar se somos um negócio real.

To assine o executável, eu uso uma tarefa MSBuild. Aqui está um trecho com as peças relevantes:

<!--
Installer files that need to be signed.
-->
<ItemGroup>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\myinstaller.msi"/>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\setup.exe"/>
</ItemGroup>

<Target Name="ReleasePackaging">
  <!-- Sign the files we're going to release -->
  <SignTool
      CertificateStoreName="My"
      CertificateSubjectName="MyCompany"
      Description="My application description"
      TimestampServerUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
      TargetFiles="@(InstallerSignedFiles)"
     />
</Target>

Para que isto funcione como acima, terá de instalar o certificado no seu armazém de Certificados Pessoais (ver CertificateStoreName="My" no exemplo acima). No site Globalsign, esta instalação foi uma parte automática do processo de download do certificado. Nota: eu descobri que ele ajuda a usar o Internet Explorer quando você baixar o certificado, como ele está integrado com a Loja de certificados Windows. Quando ele está na loja de certificados no computador de download, você pode exportá-lo como um arquivo pfx , transferi-lo para a sua máquina de compilação, e importá-lo lá. Se você exportar, eu aconselharia que você proteja o arquivo exportado com uma senha no caso de cair nas mãos erradas.

Quando você usa a tarefa SignTool MSBuild como acima, ela lê os certificados da loja pessoal ("My") que está associada com a conta de utilizador do Windows actual. Isso significa que você pode controlar quem pode assinar código com o seu certificado, o que é uma coisa boa. Você só deve importar o certificado para a loja pessoal de desenvolvedores em quem você confia.

É uma boa ideia usar o servidor timestamp ao assinar o código, para que não precise de voltar a assinar o código quando o certificado expirar.

 19
Author: Rich Tebb, 2010-06-28 22:41:53
Vai precisar do utilitário de linha de comandos de assinatura de código da Microsoft.

E depois:

signtool.exe sign /v /f "MyCertificate.pfx" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"

Ou alternativamente

signcode.exe -a "sha1" -spc "MySoftwarePublishingCertificate.spc" -v "MyPrivateKeyFile.pvk" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"
 11
Author: Ian Boyd, 2010-06-28 22:48:54

Não estou a comercializar ninguém aqui, mas tenta VeriSign. Eles oferecem assinatura de código que é o que você está procurando.

 4
Author: Julius A, 2010-06-27 17:42:22
 0
Author: zneak, 2010-06-27 17:47:34