Desde 1º de fevereiro de 2017, a assinatura de código EV pode ser considerada o requisito mínimo para assinatura de código. Os certificados são instalados em tokens USB e requerem drivers para funcionar. Com a ferramenta “Signtool.exe” do SDK do Microsoft Windows, geralmente não há problema em assinar binários interativamente. A intervenção manual ocorre quando o Signtool tenta acessar o certificado no token USB e o driver de segurança abre uma caixa de diálogo pop-up para inserir a senha do token.

Em um ambiente de construção de Integração Contínua/Entrega Contínua (CI/CD), a maioria das tarefas para criar um software produto são automatizados e executados por agentes de construção autônomos. Isso significa que não há ninguém conectado interativamente no agente. Esses agentes geralmente são máquinas virtuais sem nenhum monitor físico ou teclado. Se a assinatura de código EV for necessária, o processo de compilação será interrompido ou interrompido porque nenhum usuário verá a caixa de diálogo pop-up.

A questão "Automatize a assinatura de código de validação estendida (EV)” em stackoverflow.com oferece muitas soluções que veremos agora:

1) Use a opção do driver “Ativar logon único”.
Esta é a resposta preferida das Autoridades de Certificação. Isso ainda requer que um usuário efetue login no agente de compilação, insira a senha uma vez e bloqueie a sessão do usuário. Se o usuário fizer logout após digitar a senha uma vez, a sessão do usuário será fechada e o driver descartará a senha. Isso significa que após cada reinicialização do sistema operacional, alguém precisa fazer login no agente antes que os processos de compilação possam ser executados com êxito. Esta é uma fonte potencial de erros irritantes.

2) Use uma ferramenta/script que detecte a caixa de diálogo pop-up e insira a senha automaticamente.
Isso também requer que um usuário esteja conectado ao agente de compilação. Caso contrário, não há contexto de GUI para mostrar o diálogo e a ferramenta não pode detectá-lo. Isso também significa que a preparação manual após a reinicialização do agente de compilação é necessária.


3) Substitua “Signtool.exe” por um programa que possa assinar um arquivo e desbloquear o token USB sem intervenção manual.
A resposta de “Draketb” em stackoverflow.com oferece o código-fonte para construir “etokensign.exe”, que recebe informações semelhantes como “Signtool.exe” e a senha para desbloquear o token. Ele também precisa do nome do contêiner do certificado. Que é uma string hexadecimal que deve ser extraída manualmente do token USB.

A última proposta é a única que não necessita de login de usuário no agente de construção. Esta solução é executada totalmente autônoma. Mas ainda assim, a necessidade do nome do contêiner vincula o pipeline de compilação ao token USB. Claro que você pode usar um arquivo de script simples no agente de compilação para quebrar essa dependência. Você precisa então de um script individual para cada token. Todos os scripts devem ter o mesmo nome porque o pipeline de compilação não precisa diferenciar em qual agente de compilação ele é executado. Isso torna as soluções um pouco impraticáveis ​​– ou melhor, mais complexas do que o esperado.


Foi por isso que decidi modificar um pouco o código-fonte. O desafio foi identificar o certificado pelo nome como é feito para “Signtool.exe” com o parâmetro “/n”.

Clique no link a seguir para obter o código-fonte de “eTokenSign2”, que contém algumas pequenas alterações no código-fonte de “draketb”:

A sintaxe da linha de comando do eTokenSign2.exe é
etokensign.exe

Você pode usar o código-fonte como está. Para criar seu próprio binário basta seguir os passos de construção no final do blog entrada.

Em nosso ambiente de produção, o binário é encapsulado com um arquivo de script. Portanto, apenas nossos administradores de TI conhecem as senhas dos tokens.
A assinatura bem-sucedida pode ser verificada nas propriedades dos arquivos assinados.

Espero que este executável ajude você a executar seus processos de compilação sem a necessidade de intervenção manual 🙂

Para construir o binário siga estes passos:

1- Baixe o arquivo zip abaixo e descompacte-o.
2- Instale o Visual Studio Community 2017 ou o Ferramentas de compilação do Visual Studio 2017
3- Abra um “Prompt de comando do desenvolvedor”
4- Execute “msbuild.exe eTokenSign2.vcxproj /p:Configuration="Release” /p:Plataforma=x86″

Aviso Legal
A SOFTWARE É FORNECIDO “COMO ESTÁ”, SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO LIMITADO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NÃO EVENT OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.

Copyright (c) 2018 panagenda

Salvo indicação em contrário, esta obra está licenciada sob https://creativecommons.org/licenses/by-sa/4.0/.
É um trabalho derivado baseado no código de “draketb” em https://stackoverflow.com/a/47894907.