Como posso assinar digitalmente um executável?
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.
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"
Não estou a comercializar ninguém aqui, mas tenta VeriSign. Eles oferecem assinatura de código que é o que você está procurando.
É melhor ler assinar e verificar o código com o Autenticode.