Como crio um certificado autoassinado para assinatura de código usando ferramentas do Windows SDK?
security
code-signing
Roger Lipscombe
fonte
fonte
Respostas:
Resposta atualizada
Se você estiver usando as seguintes versões do Windows ou posterior: Windows Server 2012, Windows Server 2012 R2 ou Windows 8.1, o MakeCert agora está obsoleto e a Microsoft recomenda o uso do Cmdlet do PowerShell New-SelfSignedCertificate .
Se você estiver usando uma versão mais antiga, como o Windows 7, precisará usar o MakeCert ou outra solução. Algumas pessoas sugerem o módulo PSPKI (Public Key Infrastructure Powershell) .
Resposta original
Embora você possa criar um certificado de assinatura de código autoassinado (SPC - Software Publisher Certificate ) de uma só vez, prefiro fazer o seguinte:
Criando uma autoridade de certificação autoassinada
(^ = permite que a linha de comando do lote agrupe a linha)
Isso cria um certificado autoassinado (-r), com uma chave privada exportável (-pe). É chamado de "Minha CA" e deve ser colocado na loja da CA para o usuário atual. Estamos usando o algoritmo SHA-256 . A chave é destinada à assinatura (-sky).
A chave privada deve ser armazenada no arquivo MyCA.pvk e o certificado no arquivo MyCA.cer.
Importando o certificado da CA
Como não faz sentido ter um certificado de CA se você não confiar nele, será necessário importá-lo para o armazenamento de certificados do Windows. Você pode usar o snap-in do MMC de certificados, mas na linha de comando:
Criando um certificado de assinatura de código (SPC)
É praticamente o mesmo que acima, mas estamos fornecendo uma chave e um certificado de emissor (as opções -ic e -iv).
Também queremos converter o certificado e a chave em um arquivo PFX:
Se você deseja proteger o arquivo PFX, adicione a opção -po, caso contrário, o PVK2PFX cria um arquivo PFX sem senha.
Usando o certificado para assinar código
( Veja por que os timestamps podem ser importantes )
Se você importar o arquivo PFX para o armazenamento de certificados (poderá usar o PVKIMPRT ou o snap-in MMC), poderá assinar o código da seguinte maneira:
Alguns possíveis URLs de carimbo de data e hora
signtool /t
são:http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
Documentação completa da Microsoft
Transferências
Para aqueles que não são desenvolvedores de .NET, você precisará de uma cópia da estrutura do Windows SDK e .NET. Um link atual está disponível aqui: SDK & .NET (que instala o makecert in
C:\Program Files\Microsoft SDKs\Windows\v7.1
). Sua milhagem pode variar.MakeCert está disponível no prompt de comando do Visual Studio. O Visual Studio 2015 o possui e pode ser iniciado no Menu Iniciar do Windows 7 em "Prompt de Comando do Desenvolvedor para o VS 2015" ou "Prompt de Comando das Ferramentas Nativas do VS2015 x64" (provavelmente todos na mesma pasta).
fonte
E=your@email
. Exemplo:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
assim o certificado pode ser usado para assinatura de código (eu sei powershell não assinar scripts Se estiver em falta dela)Como indicado na resposta, para usar uma maneira não reprovada para assinar seu próprio script, deve-se usar New-SelfSignedCertificate .
O [0] fará isso funcionar nos casos em que você tiver mais de um certificado ... Obviamente, faça o índice corresponder ao certificado que você deseja usar ... ou use uma maneira de filtrar (por impressão digital ou por emissor).
Obviamente, depois de configurar a chave, você pode simplesmente assinar quaisquer outros scripts com ela.
Você pode obter informações mais detalhadas e alguma ajuda para solução de problemas neste artigo .
fonte
(get-ChildItem ...)
retorno de mais de um certificado, coloquei "[0]" no final e funcionou. Como emExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
A resposta de Roger foi muito útil.
No entanto, tive um pequeno problema ao usá-lo e continuei recebendo a caixa de diálogo vermelha "O Windows não pode verificar o editor deste software de driver". A chave era instalar o certificado raiz de teste com
que a resposta de Roger não cobriu completamente.
Aqui está um arquivo em lotes que funcionou para mim (com meu arquivo .inf, não incluído). Ele mostra como fazer tudo do início ao fim, sem nenhuma ferramenta GUI (exceto algumas solicitações de senha).
fonte
É bastante fácil usar o comando New-SelfSignedCertificate no Powershell. Abra o PowerShell e execute esses 3 comandos.
Seu certificado selfsigncert.pfx será localizado @
D:/
Etapa opcional: você também precisará adicionar a senha do certificado às variáveis de ambiente do sistema. faça isso digitando abaixo em cmd:
setx CSC_KEY_PASSWORD "my_password"
fonte
A partir do PowerShell 4.0 (Windows 8.1 / Server 2012 R2), é possível criar um certificado no Windows sem o makecert.exe .
Os comandos que você precisa são New-SelfSignedCertificate e Export-PfxCertificate .
As instruções estão em Criando certificados autoassinados com o PowerShell .
fonte