Assinando um arquivo EXE do Windows

180

Eu tenho um arquivo EXE que gostaria de assinar para que o Windows não avise o usuário final sobre um aplicativo de um "editor desconhecido". Eu não sou desenvolvedor de Windows. O aplicativo em questão é um protetor de tela gerado a partir de um aplicativo que gera aplicativos de proteção de tela. Como tal, não tenho influência sobre como o arquivo é gerado.

Já descobri que precisarei de um certificado de assinatura de código de uma CA como a Verisign ou instantssl.com. O que não entendo é o que preciso fazer (se possível) para assinar meu arquivo EXE. O que é uma explicação simples?

A resposta de Mel Green me levou mais longe, mas o signtool quer que eu especifique qual certificado usar em qualquer caso. Posso obter um certificado de assinatura de código gratuito de alguma forma para testar se isso funcionará para mim?

Especifique também que tipo de certificado é o correto. A maioria dos sites menciona apenas "assinatura de código" e fala sobre aplicativos de assinatura que são realmente compilados pelo usuário. Este não é o meu caso.

Lasar
fonte
3
Apenas curioso - quanto é preciso pagar para comprar um certificado?
InTheNameOfScience
2
@Rigel cerca de US $ 400 por ano, provavelmente não vale a pena :)
Sharan Arumugam
@SharanArumugam: WHAAT ?????? É como a Microsfot é contra software barato / grátis!
InTheNameOfScience 12/03/19

Respostas:

116

Você pode tentar usar a Ferramenta de Sinais da Microsoft

Você faz o download como parte do Windows SDK para Windows Server 2008 e .NET 3.5. Depois de baixado, você pode usá-lo na linha de comando da seguinte maneira:

sinal de ferramenta de sinalização / um MyFile.exe

Isso assina um único executável, usando o "melhor certificado" disponível. (Se você não tiver um certificado, ele mostrará uma mensagem de erro do SignTool.)

Ou você pode tentar:

signtool signwizard

Isso iniciará um assistente que orientará você na assinatura do aplicativo. (Esta opção não está disponível após o Windows SDK 7.0.)


Se você deseja obter um certificado que você pode usar para testar seu processo de assinatura do executável, use a ferramenta .NET Makecert .

Ferramenta de criação de certificados (Makecert.exe)

Depois de criar seu próprio certificado e usá-lo para assinar seu executável, você precisará adicioná-lo manualmente como uma CA raiz confiável para sua máquina para que o UAC diga ao usuário que o executa que é de uma fonte confiável. Importante . A instalação de um certificado como ROOT CA colocará em risco a privacidade dos usuários. Veja o que aconteceu com a DELL. Você pode encontrar mais informações para fazer isso no código e no Windows em:

Espero que isso forneça mais algumas informações para quem tentar fazer isso!

Mel Green
fonte
Um fluxo de trabalho em questão em separado: stackoverflow.com/questions/84847/…
The_Ghost
4
"Esta ferramenta é instalada automaticamente com o Visual Studio. Para executar a ferramenta, use o prompt de comando do desenvolvedor (ou o prompt de comando do Visual Studio no Windows 7)." msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92
Muito curioso sobre o certificado usado pelo signtool também.
Overdrivr
1
A opção "signwizard" não está disponível após o Windows SDK 7.0
Omar Reis
O Makecert foi descontinuado e um cmdlet do PowerShell New-SelfSignedCertificate deve ser usado para criar um certificado de teste. Detalhes em stackoverflow.com/a/51443366/38117911 (resposta a uma pergunta vinculada por The_Ghost).
Alexander Revo
35

Eu tive o mesmo cenário no meu trabalho e aqui estão nossas descobertas

A primeira coisa que você precisa fazer é obter o certificado e instalá-lo no seu computador; você pode comprar um de uma Autoridade de Certificação ou gerar um usando o makecert .

Aqui estão os prós e contras das 2 opções

Compre um certificado

  • Prós
    • O uso de um certificado emitido por uma CA (Autoridade de Certificação) garantirá que o Windows não avise o usuário final sobre um aplicativo de um "editor desconhecido" em qualquer Computador que use o certificado da CA (o SO normalmente vem com os certificados raiz de várias CAs )
  • Contras:
    • Há um custo envolvido na obtenção de um certificado de uma CA

Gere um certificado usando Makecert

  • Prós:
    • As etapas são fáceis e você pode compartilhar o certificado com os usuários finais
  • Contras:
    • Os usuários finais terão que instalar manualmente o certificado em suas máquinas e, dependendo de seus clientes, isso pode não ser uma opção
    • Certificados gerados com makecert são normalmente usados ​​para desenvolvimento e teste, não para produção

Assine o arquivo executável

Existem duas maneiras de assinar o arquivo que você deseja:

  • Usando um certificado instalado no computador

    signtool.exe assina / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.dll"

    • Neste exemplo, estamos usando um certificado armazenado na pasta Pessoal com uma impressão digital SHA1 (esta impressão digital vem do certificado) para assinar o arquivo localizado em "C: \ filename.dll"
  • Usando um arquivo de certificado

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ caminho \ para \ mycert.pfx" / p pfxpassword "c: \ caminho \ para \ arquivo.exe"

    • Neste exemplo, estamos usando o certificado "c: \ path \ to \ mycert.pfx" com a senha pfxpassword para assinar o arquivo "c: \ path \ to \ file.exe"

Teste sua assinatura

Método 1: usando o signtool

Vá para: Iniciar> Executar Digite CMD> clique em OK No prompt de comando, digite o diretório em que a ferramenta de assinatura existe Execute o seguinte:

signtool.exe verifica / pa / v "C: \ filename.dll"

Método 2: usando o Windows

Clique com o botão direito do mouse no arquivo assinado. Selecione Propriedades. Selecione a guia Assinaturas digitais. A assinatura será exibida na seção Lista de assinaturas.

Espero que isso possa ajudá-lo

Fontes:

Erick Castrillo
fonte
Ainda bem que posso ajudar @PhilLab #
Erick Castrillo
Forneça também uma estimativa de $$$. Obrigado!
InTheNameOfScience 24/10/19
1
@WeGoToMars Acho que este artigo pode ajudá-lo cheapsslsecurity.com/sslproducts/codesigningcertificate.html ou aqui digicert.com/code-signing
Erick Castrillo
30

Você pode obter um certificado de assinatura de código barato gratuito da Certum se estiver desenvolvendo código-fonte aberto.

Uso o certificado deles há mais de um ano e ele se livra da mensagem desconhecida do editor do Windows.

No que diz respeito à assinatura do código, eu uso o signtool.exe a partir de um script como este:

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe
Lee Richardson
fonte
3
Não parece mais gratuito, ainda é muito mais barato, € 14
hultqvist
1
Você está certo, não parece mais livre. Acabei de renovar e não paguei nada. Talvez eu tenha um avô. Talvez seus processos internos estejam quebrados. Seu site com certeza é complicado.
Lee Richardson
4
Isso é € 25,00 agora? ( en.sklep.certum.pl/data-safety/code-signing-certificates/… )
ewerybody
A loja Certum diz que o certificado de código aberto NÃO remove a mensagem do Microsoft SmartScreen Filter.
Markus Laire 25/06
17

A revista ASPects da ASP ASP tem uma descrição detalhada de como assinar código (você precisa ser um membro para ler o artigo). Você pode baixá-lo em http://www.asp-shareware.org/

Aqui está o link para uma descrição de como você pode criar seu próprio certificado de teste .

Isso também pode ser interessante.

Andreas
fonte
7
Adendo quatro anos depois: o Comodo foi comprometido em algum momento no início de 2012 ( blogs.comodo.com/it-security/data-security/… ) e muitos agentes de usuário agora rejeitam certificados com uma autoridade raiz do Comodo
A. Wilson
8
A Comodo ainda é uma aposta arriscada em meados de 2013 e, por 'agentes de usuários', isso significa Microsoft / Windows, com certeza eles são os que decidem se devem mostrar essa notória mensagem de 'publicador desconhecido'.
Dan W
Desculpe, as recomendações de serviço explícitas foram removidas, que são 1) desatualizadas e 2) foram excluídas do tópico agora (porque 1.).
deceze
8

Referência https://steward-fu.github.io/website/driver/wdm/self_sign.htm Nota: signtool.exe do Microsoft SDK

1.primeira vez (para fazer cert privado)

Makecert -r -pe -ss YourName YourName.cer

certmgr.exe -adicione YourName.cer -s -r raiz localMachine

2.Depois (para adicionar seu sinal ao seu aplicativo)

signtool sign / s YourName YourApp.exe

Ethan Kuo
fonte
4

E ainda outra opção, se você estiver desenvolvendo no Windows 10, mas não tiver o signtool.exe da Microsoft instalado, poderá usar o Bash no Ubuntu no Windows para assinar seu aplicativo. Aqui está um resumo:

https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/

Stacey Richards
fonte
osslsigncodetambém está disponível em cygwin, portanto, se você já estiver usando isso (como eu sou), poderá entrar no seu ambiente atual, em vez de precisar mudar para a WSL.
thoni56
4

Use o link a seguir para assinar o arquivo .exe (instalação / instalação) (assinar o arquivo exe / instalação sem usar a ferramenta de instalação da Microsoft)

https://ebourg.github.io/jsign/#files

comando de amostra java -jar jsign-2.0.jar --keystore keystore.jks "- alias alias --storepass password MyInstaller.exe

Trabalhou para mim :)

user2085962
fonte
3

Esta não é uma resposta direta à pergunta, mas está intimamente relacionada (e útil, espero), uma vez que mais cedo ou mais tarde um programador terá colocado a mão na carteira:

Portanto, os preços da assinatura EV:

1 ano $ 350 + (taxa oculta de $ 50)
2 anos $ 600
3 anos $ 750
[www.ksoftware.net] [3]
eToken enviado como pendrive. Não é necessário leitor.
Você compra na Comodo (Sectigo)

1 ano 350 euros
3 anos 799 euros
sklep.certum.pl

1 ano $ 499 USD
3 ano $ 897 USD
sectigo.com

1 ano $ 410 total
2 anos $ 760 total
3 anos $ 950 total
www.globalsign.com

1 ano: $ 600 (era $ 104)
3 anos:?
www.digicert.com

1 ano: US $ 700
3 anos: caro ridículo
[ https://trustcenter.websecurity.symantec.com/]

Mais preços aqui:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


Veja também o link adicionado por Erick Castrillo: cheappsslsecurity.com/sslproducts/codesigningcertificate.html

InTheNameOfScience
fonte