Como assinar digitalmente nossos aplicativos Clickonce e Executáveis

Nessa postagem estarei dando um passo a passo de como assinar digitalmente aplicativos publicados pelo ClickOnce no Visual Studio e como assinar o executável principal da aplicação.

Inicialmente vou responder a seguinte dúvida: quais são os benefícios de assinar um aplicativo?

São diversos benefícios, vou listar aqui alguns que tiveram maior relevância para nossa empresa:

  1. Recentemente tivemos um problema gravíssimo com nosso software Pet Shop Control. Vários clientes nos reportaram que ao longo do dia, por diversas vezes, todos ícones e botões do software sumiam (ficavam brancos). Acabamos descobrindo que o aplicativo de segurança bancário da GAS TECNOLOGIA, bloqueava nosso software, por ele não conter uma assinatura digital. Portanto, sempre que um cliente acessava um internet banking, o sistema de segurança era ativado e bloqueava o Pet Shop Control.
  2. Sempre que lançávamos uma atualização do software via clickonce, quando os clientes colocavam para atualizar, aparecia uma mensagem do SmartScreen do Windows, tentando bloquear essa operação, falando que o computador poderia estar em risco.
  3. Quando os clientes vão instalar o software sem assinatura digital, aparece que o Publisher é desconhecido. Isso passa uma imagem ruim para o usuário.
  4. A maioria dos anti-vírus consideram aplicativos sem assinatura digital suspeitos, podendo bloquear determinadas operações.

Esses são os pontos mais importantes que identificamos.

Ok! Mas como faço para assinar meus aplicativos e executáveis?

  1. Você tem que adquirir um certificado digital code signing. Nós compramos o nosso na COMODO. Você deve solicitar o certificado, realizar o pagamento do boleto, por fim, eles fazem algumas validações e ligam pra sua empresa. (eles possuem suporte em português). Eu vi que tem outras empresas de certificado que vendem, mas a COMODO foi o mais barato que encontrei, segue o link: http://www.comodobr.com/produtos/certificado_codesigning.php
  2. Importante: tem que ser esse tipo de certificado (code siging – certificado digital de assinatura de código), não adianta querer usar certificados digitais de nfe ou e-cnpj que não funcionam!!
  3. Com o certificado instalado na sua máquina, você deve exportar ele para .pfx e inserir uma senha pessoal. No fim desse processo, você terá em sua máquina um arquivo com extensão .pfx que é o arquivo que você irá utilizar para assinar seu aplicativo e executáveis.
  4. No Visual Studio, abra seu projeto, na Solution Explorer clique com o botão direito no projeto principal e selecione Properties. Na tela de Properties selecione a aba Signing. Clique no botão “Select from file” e selecione o seu arquivo de certificado .pfx. Logo no campo abaixo “Timestamp server URL:” Devemos colocar um link que possa informar no aplicativo a data e hora que foi assinado, aprimorando ainda mais a confiabilidade do software. Nós utilizamos o link: http://timestamp.verisign.com/scripts/timstamp.dll
  5. Feito esse processo, compile sua aplicação (caso seja solicitado a senha do certificado é só informar a senha utilizada ao exportar o certificado).
  6. Agora vamos assinar o executável que acabamos de compilar. Para isso, vamos utilizar o software SignTool da própria Microsoft. Você deve identificar em qual pasta do seu computador encontra-se o signtool.exe. Ele é instalado automaticamente com o Framework, no meu computador estava no seguinte caminho: “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe”. E precisamos do local que se encontra o executável do seu aplicativo, no meu caso estava em: “C:\Sistemas\PetShopControl\PetShopControl\bin\Release\PetShopControl.exe”. E por fim, em qual local se encontra o arquivo do certificado .pfx, no meu caso estava em: “C:\Users\Fernando\Desktop\CertificadoPSCComodo2015.pfx”. Com esses caminhos todos a mão, devemos abrir o prompt de comando e executar os seguintes comandos:
    1. cd “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin”
    2. signtool.exe sign /f “CAMINHO_DO_CERTIFICADO” /p SENHA_DO_CERTIFICADO /t “LINK_TIMESTAMP” /a “CAMINHO_DO_EXECUTAVEL”
    3. É só substituir os campos: CAMINHO_DO_CERTIFICADO, SENHA_DO_CERTIFICADO, LINK_TIMESTAMP,  CAMINHO_DO_EXECUTAVEL, pelos valores corretos. No meu caso ficou assim: signtool.exe sign /f “C:\Users\Fernando\Desktop\CertificadoPSCComodo2015.pfx” /p senhacertificado /t “http://timestamp.verisign.com/scripts/timstamp.dll” /a “C:\Sistemas\PetShopControl\PetShopControl\bin\Debug\PetShopControl.exe”
  7. Feito esse processo é só dar o publish normal através do ClickOnce. Você pode assinar outros arquivos como DLLs e EXEs, mas no nosso caso, só o executável principal da aplicação já solucionou todos os problemas.

Acho que é isso galera, qualquer dúvida ou sugestão podem comentar que tentarei ajudar.

Fernando Augusto – CEO da Devsol Softwares

4 comments

  1. Stefano Ferri
    Stefano says:

    Muito bom o post sobre a assinatura do projeto. Fiquei com uma dúvida: toda a vez que vamos publicar o programa precisamos assinar o EXE novamente? ou feito uma vez ele será assinado para sempre (até o vencimento do certificado)? pergunto isso para caso necessário acrescentarmos esse procedimento em nosso passo a passo de atualização.

    um abraço e camigol!

    • Fernando Augusto
      Fernando Augusto says:

      Tem duas formas de automatizar esse processo:
      1 – Nas Properties do projeto, na aba “Build Events”, na opção: “Post-build event command line:”, podemos inserir um comando que automatize a assinatura do executável do projeto:
      “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe” sign /f “$(ProjectDir)CertificadoPSCComodo2015.pfx” /p senha_certificado /t “http://timestamp.verisign.com/scripts/timstamp.dll” /a $(TargetPath)
      (utilizei dois macros, um que pega automaticamente o local do executável $(TargetPath) e o outro que pega a pasta do projeto que estará com o certificado $(ProjectDir)).
      2 – Na aba Signing, tem a opção de “Sign the assembly”, que eu sei que é para assinar os executáveis e dlls do projeto, porém quando tentei utilizar essa opção, o visual studio informa que todos os projetos vinculados ao seu principal, também devem uma assinatura. Eu fui tentando assinar todos os projeto, o problema foi que algumas bibliotecas que utilizamos são terceirizadas e essas eu não consegui assinar. Enfim, precisaria realizar mais pesquisas para identificar como resolver essa situação.

      Abraço e obrigado pelo comentário!

  2. Marcelo says:

    Olá Fernando.
    Muito esclarecedor este seu post.
    Acessei hoje o site comodobr para informações sobre como adquirir o certificado.
    Entretanto me deparei com a informação que os dados devem ser iguais aos informados na Receita Federal, como por exemplo o CNPJ da empresa.
    Eu sou inscrito como programador autonomo na prefeitura da minha cidade.
    Enviei hoje mesmo, esta questão na seção fale conosco no site comodobr, (e espero que eles respondam).
    Procurei pela internet mas não encontrei informações sobre adquirir o certificado como programador independente.
    Por gentileza, você sabe algo a respeito, ou onde posso encontrar essa informação?
    Muito obrigado.

  3. Muito boa as informações sobre assinatura de executável.
    Tentei fazer o procedimento acima, inclusive comprei o certificado da Comodo, porém ainda estou no passo inicial, fiz o download o do arquivo a partir de um e-mail da COMODO. Nesse e-mail veio também uma senha ou chave do certificado.

    Mas o arquivo não era de extensão pfx, eu instalei no meu Windows mesmo assim, e depois tentei exportar, mas não consegui exportar para .pfx.
    Acho que por isso os passos seguintes não funcionaram.

    O que eu posso ter feito de errado?

    Obrigado.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>