Porque devo assinar digitalmente meus executáveis ?
O Produto final de quase todo desenvolvedor de Software para Windows, é gerar um arquivo compilado e executável, ou seja, um arquivo com a extensão .EXE ou .DLL
As versões recentes do Windows, incorporaram recursos de segurança, como o SmartScreen, que podem causar alertas quando Binários não assinados são executados...
O mesmo pode ocorre com módulos de Segurança de terceiros, instalados na máquina, como por exemplo: Antivírus e módulos de segurança bancários...
Para evitar mensagens assustadoras, como a exibida abaixo, é necessário Assinar digitalmente o seu binário, com um certificado emitido por uma Autoridade Certificadora válida
A título de exemplo, todos os binários distribuídos pelo Projeto ACBr, na área de Download do SAC ACBr, são assinados digitalmente com um certificado do Projeto ACBr...
Reparem que não somente o Executável final, mas o instalador, também deve ser assinado..
Abaixo, temos a imagem de quando é executamos o Instalador do ACBrMonitorPLUS SAC
Bem melhor, não ? Repare que o Fornecedor do binário, fica bem identificado na mensagem... Isso além de trazer mais confiança para o usuário final, ajuda os programas de segurança, a classificar de forma positiva, o seu Executável ou instalador, evitando bloqueios indevidos.
Ok, gostei... mas como fazer para assinar meus executáveis ?
O primeiro passo é comprar um Certificado do tipo "Code Signing"...
Garanto que agora você pensou algo como:
- Humm.. será que posso usar o meu certificado A1 ou A3 ?
A resposta é NÃO... os certificados que usamos para os Documentos Fiscais eletrônicos brasileiros, não tem as características esperadas pelo Windows, para assinatura e validação de binários...
Quanto aos certificados gerados de forma local, ou seja, os Self-Signed Certificates, eles funcionarão para a assinatura... e podem ser ótimos para testes... Mas eles não devem garantir o nível de confiabilidade ao seu binário, pois eles não são gerados por uma Autoridade Certificadora válida
Algumas empresas Brasileiras, vendem o certificado do tipo Code Signing.. Veja por exemplo esse link... Porém o preço é praticamente "o valor de um Rim esquerdo"...
(ps: veja mais empresas brasileiras, no post a seguir)
Você pode comprar o Certificado do Tipo OV, que é bem mais barato... Na página da KSoftware tem um interessante artigo, descrevendo a diferença da versão OV x EV
Eu preferi comprar nesse site gringo, porém isso pode exigir que você tenha um bom conhecimento de Inglês, pois o todo o processo de compra será feito em Inglês.
Esse certificado, também exige um processo de validação... ou seja, a Empresa que irá emitir o certificado, precisa saber se você é você mesmo...
A validação foi feita pela empresa Sectigo... eles enviam e-mails com links para você subir a documentação necessária... Como o certificado será emitido para uma Entidade Pessoa Jurídica, na etapa de envio de documentos de prova de identidade... eu enviei um PDF com o resultado da consulta de meu CNPJ, na Receita...
Na etapa final de validação, eles efetuam uma ligação para o telefone de sua empresa, para fornecer um Token, que deve ser usado para gerar o certificado... portanto, o número de telefone na documentação que você enviar, deve ser um número que você possa atender... Achei o Site de Validação da Sectigo, bastante confuso...
Eu preferi comprar a opção de 4 anos, para evitar esse penoso processo de compra, e pelos descontos oferecidos...
Após todas as validações de identidade, eles lhe enviarão um Link para baixar o certificado em sua máquina... Será criado um arquivo PFX, e o processo de geração do Certificado na sua máquina, é muito semelhante a dos Certificados A1 brasileiros...
Ufa.. já tenho o meu certificado em PFX... Como eu assino os binários ?
Existem algumas ferramentas disponíveis... na página da KSoftware, você pode ler um tutorial, de como assinar usando o KSign
Você poderá assinar binários facilmente, usando a interface gráfica deles:
Para automatizar o processo de assinatura, você provavelmente ira preferir usar um utilitário de Linha de Comando...
Repare que na mesma pasta onde o KSign foi instalado, existe o utilitário signtool.exe
Use esse utilitário com a seguinte sintaxe:
signtool.exe sign /du "http://seusite.com.br" /d "Descrição do seu Programa" /f "C:\Path\SeuCertificado.PFX" /p SenhaCertififcado /t "http://timestamp.comodoca.com" SeuBinario.exe
sign -> Comando para assinatura
/du -> Informa a URL do seu Site
/d -> Informa uma descrição resumida do seu Programa
/f -> Informa o Path completo para o seu Certificado (arquivo PFX)
/p -> Informa a Senha para abertura do seu Certificado
/t -> Informa um Servidor de Time Stamp, para que fique gravada a Data / Hora da assinatura
Mas como assinar um Binário Windows, de dentro do Linux ??
Todo processo de Build e Deploy dos binários do ACBr, é executado em um Linux OpenSuse.
A compilação de todas as plataformas que suportamos ocorre com Cross-Compiling, e automatizamos o processo de Build e Deploy, com o uso de Jenkins e Shell Scripts,
Para transmitir o binário para fórum, criamos alguns utilitários que consomem a API do Invision Power Board
Para a assinatura dos binários, creio que seria possível usar o próprio signtool.exe, com Wine... mas encontramos um interessante utilitário nativo em Linux, chamado osslsigncode, repare que a sintaxe é muito semelhante a do signtool.exe...
osslsigncode sign -pkcs12 /path/SeuCertificado.pfx -pass SuaSenha -n "Descrição do seu Programa" -i http://seusite.com.br -t http://timestamp.comodoca.com -in SeuBinario.exe -out SeuBinario.exe.sign
(como passo final, apague o arquivo original, SeuBinario.exe e renomeie SeuBinario.exe.sign para SeuBinario.exe)