SignTool

O SignTool é uma ferramenta de linha de comando que assina digitalmente arquivos, verifica as assinaturas em arquivos e os arquivos de carimbos de data/hora. Para obter informações sobre por que a assinatura de arquivos é importante, consulte Introdução à assinatura de código.

A ferramenta é instalada na pasta \Bin do caminho de instalação do SDK (Software Development Kit) do Microsoft Windows, por exemplo: C:\Arquivos de Programas (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe.

O SignTool está disponível como parte do SDK do Windows, que você pode baixar do SDK do Windows.

Observação

O SDK do Windows 10, Windows 10 HLK, Windows 10 WDK e Windows 10 ADK builds 20236 e posteriores exigem que você especifique o algoritmo de resumo. O comando SignTool sign requer a opção de algoritmo de resumo de arquivo (/fd) e a opção de algoritmo de resumo de carimbo de data/hora (/td) durante a assinatura e o carimbo de data/hora, respectivamente.

Se /fd não for especificado durante a assinatura e se /td não for especificado durante o carimbo de data/hora, o comando gerará um aviso, o código de erro 0, inicialmente. Em versões posteriores do SignTool, o aviso se torna um erro. Recomendamos SHA256. Ele é considerado mais seguro do que o SHA1 pela indústria.

Sintaxe

signtool [command] [options] [file_name | ...]

parâmetros

Argumento Descrição
command Um dos quatro comandos que especifica uma operação a ser executada em um arquivo: catdb, sign, timestampou verify. Para obter uma descrição de cada comando, consulte a próxima tabela.
options Uma opção que modifica um comando. Além das opções globais /q e /v, cada comando dá suporte a um conjunto exclusivo de opções.
file_name O caminho para um arquivo a ser assinado.

O SignTool dá suporte aos seguintes comandos:

Comando Descrição
catdb Adiciona ou remove um arquivo de catálogo de um banco de dados do catálogo. Os bancos de dados do catálogo são usados na pesquisa automática de arquivos de catálogo e são identificados por uma GUID. Para obter uma lista das opções compatíveis com o catdb comando , consulte opções de comando catdb.
sign Assina arquivos digitalmente. As assinaturas digitais protegem os arquivos contra adulteração e permitem que os usuários verifiquem o signatário com base em um certificado de autenticação. Para obter uma lista das opções compatíveis com o sign comando , consulte opções de comando de sinal.
timestamp Arquivos de carimbos de data/hora. Para obter uma lista das opções compatíveis com o timestamp comando , consulte opções de comando de carimbo de data/hora.
verify Verifica a assinatura digital de arquivos. Determina se o certificado de autenticação foi emitido por uma autoridade confiável, se o certificado de autenticação foi revogado e, opcionalmente, se o certificado de autenticação é válido para uma política específica. Para obter uma lista das opções compatíveis com o verify comando , consulte verificar opções de comando.

As opções a seguir se aplicam a todos os comandos SignTool.

Opção global Descrição
/q Não exibirá nenhuma saída se o comando for executado com êxito e exibirá saída mínima se o comando falhar.
/v Exibe saída detalhada, independentemente de o comando ser executado com êxito ou falhar, além de exibir mensagens de aviso.
/debug Exibe informações de depuração.

Opções de comando do Catdb

A tabela a seguir lista as opções que podem ser usadas com o comando catdb.

Opção Catdb Descrição
/d Especifica se o banco de dados do catálogo padrão está atualizado. Se você não usar ou /d/g, o SignTool atualizará o componente do sistema e o banco de dados do driver.
/gGUID Especifica que o banco de dados de catálogo identificado pelo GUID é atualizado.
/r Remove o catálogo especificado do banco de dados do catálogo. Se essa opção não for especificada, SignTool adicionará o catálogo especificado ao banco de dados do catálogo.
/u Especifica se um nome exclusivo é gerado automaticamente para os arquivos de catálogo adicionados. Se necessário, os arquivos do catálogo são renomeados para evitar conflitos de nome com os arquivos de catálogo existentes. Se essa opção não for especificada, o SignTool substituirá qualquer catálogo existente que tenha o mesmo nome que o catálogo especificado.

Observação

Os bancos de dados de catálogo são usados para pesquisa automática de arquivos de catálogo.

Opções do comando de entrada

A tabela a seguir lista as opções que podem ser usadas com o comando sign.

Opções do comando de entrada Descrição
/a Seleciona automaticamente o melhor certificado de assinatura. O SignTool localiza todos os certificados válidos que atendem a todas as condições especificadas e seleciona aquele que é válido por mais tempo. Se essa opção não estiver presente, a SignTool espera encontrar apenas um certificado de autenticação válido.
/acfile Adiciona outro certificado do arquivo ao bloco de assinatura.
/as Acrescenta esta assinatura. Se nenhuma assinatura primária existir, essa assinatura será feita a assinatura primária.
/cCertTemplateName Especifica o Nome do Modelo de Certificado (uma extensão da Microsoft) para o certificado de assinatura.
/cspCSPName Especifica o provedor de serviços de criptografia (CSP) que contém o contêiner de chave privada.
/dDesc Especifica uma descrição do conteúdo assinado.
/dgPath Gera o resumo a ser assinado e os arquivos PKCS7 não assinados. O resumo de saída e os arquivos PKCS7 são <Path>\<FileName.dig> e <Path>\<FileName.p7u>. Para gerar um arquivo XML extra, use /dxml.
/diPath Cria a assinatura ingerindo o resumo assinado para o arquivo PKCS7 sem sinal. O resumo assinado de entrada e os arquivos PKCS7 não assinados devem ser <Path>\<FileName.dig.signed> e <Path>\<FileName.p7u>.
/dlibDLL Especifica a DLL que implementa a função com a AuthenticodeDigestSign qual assinar o resumo. Essa opção é equivalente a usar SignTool separadamente com as /dgopções , /dse /di . Essa opção invoca todos os três como uma operação atômica.
/dmdfFilename Quando usado com a opção /dg , passa o conteúdo do arquivo para a AuthenticodeDigestSign função sem modificação.
/ds Assina apenas o resumo. O arquivo de entrada deve ser o resumo gerado pela opção /dg . O arquivo de saída é: <File.signed>.
/duURL Especifica uma URL (Uniform Resource Locator) para obter a descrição expandida do conteúdo assinado.
/dxml Quando usado com a opção /dg , produz um arquivo XML. O arquivo de saída é: <Path>\<FileName>.dig.xml.
/fSignCertFile Especifica o certificado de assinatura em um arquivo. Se o arquivo estiver no formato PFX (Personal Information Exchange) e protegido por senha, use a opção /p para especificar a senha. Se o arquivo não contiver chaves privadas, use as /csp opções e /kc para especificar o CSP e o nome do contêiner de chave privada.
/fdalg Especifica o algoritmo de resumo do arquivo a ser usado na criação de assinaturas de arquivo. Observação: se a opção /fd não for especificada durante a assinatura, o comando gerará um erro.
/fd certHash Especificar a cadeia de caracteres "certHash" faz com que o comando use o algoritmo especificado no certificado de autenticação. Observação: se a opção /fd não for especificada durante a assinatura, o comando gerará um erro.
/iIssuerName Especifica o nome do emissor de certificado de assinatura. Esse valor pode ser uma subcadeia de caracteres do nome do emissor inteiro.
/kcPrivKeyContainerName Especifica o nome do contêiner de chave privada.
/nSubjectName Especifica o nome do assunto do certificado de assinatura. Esse valor pode ser uma subcadeia de caracteres do nome da entidade inteiro.
/nph Se compatível, suprime hashes de página para arquivos executáveis. O padrão é determinado pela variável de ambiente SIGNTOOL_PAGE_HASHES e pela versão wintrust.dll . Essa opção é ignorada para arquivos não PE.
/pPassword Especifica a senha a ser usada durante a abertura de um arquivo PFX. Use a opção /f para especificar um arquivo PFX.
/p7Path Especifica se um arquivo PKCS (Public Key Cryptography Standards) #7 é produzido para cada arquivo de conteúdo especificado. Os arquivos PKCS nº 7 são nomeados <path>\<filename.p7>.
/p7ceValue Especifica opções para o conteúdo de PKCS #7 assinado. Defina Value como Embedded para inserir o conteúdo assinado no arquivo PKCS nº 7 ou para DetachedSignedData produzir a parte de dados assinados de um arquivo PKCS nº 7 desanexado. Se a opção /p7ce não for especificada, o conteúdo assinado será inserido por padrão.
/p7co<OID> Especifica o OID (identificador de objeto) que identifica o conteúdo assinado de PKCS #7.
/ph Se compatível, gera hashes de página para arquivos executáveis.
/rRootSubjectName Especifica o nome do assunto do certificado raiz em que o certificado de assinatura deve ser encadeado. Esse valor pode ser uma subcadeia de caracteres do nome da entidade inteiro do certificado raiz.
/sStoreName Especifica o repositório a ser aberto quando o comando pesquisa o certificado. Se essa opção não for especificada, o comando abrirá o repositório My .
/sha1Hash Especifica o hash SHA1 do certificado de assinatura. O hash SHA1 normalmente é usado quando vários certificados atendem aos critérios especificados pelas opções restantes.
/sm Especifica que o comando usa um repositório de computadores, em vez de um repositório de usuários.
/tURL Especifica a URL do servidor de carimbo de data/hora. Se essa opção ou /tr não for especificada, o arquivo assinado não será carimbado. Se o carimbo de data/hora falhar, o comando gerará um aviso. Essa opção não pode ser usada com a opção /tr .
/tdalg Usado com a opção /tr para solicitar um algoritmo de resumo usado pelo servidor do carimbo de data/hora RFC 3161. Observação: se /td não for especificado durante o carimbo de data/hora, o comando gerará um erro.
/trURL Especifica a URL do servidor do carimbo de data/hora RFC 3161. Se essa opção ou /t não for especificada, o arquivo assinado não será carimbado. Se o carimbo de data/hora falhar, o comando gerará um aviso. Essa opção não pode ser usada com a opção /t .
/uUsage Especifica o EKU (uso avançado de chave) que deve estar presente no certificado de assinatura. O valor de uso pode ser especificado por OID ou por cadeia de caracteres. O uso padrão é Code Signing ou 1.3.6.1.5.5.7.3.3.
/uw Especifica o uso de Windows System Component Verification ou 1.3.6.1.4.1.311.10.3.6.

Para obter exemplos de uso, consulte Using SignTool to Sign a File (Usando a SignTool para assinar um arquivo).

Opções de comando de carimbo de data/hora

A tabela a seguir lista as opções que podem ser usadas com o comando timestamp.

Opção de carimbo de data/hora Descrição
/p7 Arquivos PKCS #7 do carimbo de data/hora.
/tURL Especifica a URL do servidor de carimbo de data/hora. O arquivo com carimbo de data/hora assinado anteriormente. A opção /t ou /tr é obrigatória.
/tdalg Usado com a opção /tr para solicitar um algoritmo de resumo usado pelo servidor do carimbo de data/hora RFC 3161. Observação: se /td não for especificado durante o carimbo de data/hora, o comando gerará um aviso.
/tpindex Marca com o carimbo de data/hora a assinatura em index.
/trURL Especifica a URL do servidor do carimbo de data/hora RFC 3161. O arquivo com carimbo de data/hora assinado anteriormente. A opção /tr ou /t é obrigatória.

Verificar opções de comando

Opção Verificar Descrição
/a Especifica que todos os métodos podem ser usados na verificação do arquivo. Primeiro, o SignTool pesquisa os bancos de dados do catálogo para determinar se o arquivo está conectado a um catálogo. Se o arquivo não estiver conectado a nenhum catálogo, o SignTool tentará verificar a assinatura inserida do arquivo. Recomendamos essa opção ao verificar arquivos que podem ou não estar conectados a um catálogo. Exemplos de arquivos que podem ou não ser assinados incluem arquivos ou drivers do Windows.
/ad Encontra o catálogo usando o banco de dados do catálogo padrão.
/all Verifica todas as assinaturas em um arquivo com várias assinaturas.
/as Encontra o catálogo usando o banco de dados do catálogo do componente de sistema (driver).
/agCatDBGUID Localiza o catálogo no banco de dados do catálogo identificado pelo GUID.
/cCatFile Especifica o arquivo de catálogo por nome.
/d Imprime a descrição e a URL de descrição. Windows Vista e anteriores: não há suporte para essa opção.
/dsIndex Verifica a assinatura em uma determinada posição.
/hash{SHA1|SHA256} Especifica um algoritmo de hash opcional a ser usado durante a procura de um arquivo em um catálogo.
/kp Executa a verificação usando a política de assinatura de driver do modo kernel x64.
/ms Usa várias semânticas de verificação. Esse comportamento é o padrão de uma chamada WinVerifyTrust .
/oVersion Verifica o arquivo pela versão do sistema operacional. O parâmetro version é do formato: <PlatformID>:<VerMajor>.< VerMinor>.< BuildNumber>. Recomendamos o uso da opção /o . Se /o não for especificado, SignTool poderá retornar resultados inesperados. Por exemplo, se você não incluir /o, os catálogos do sistema que são validados corretamente em um sistema operacional mais antigo poderão não ser validados corretamente em um sistema operacional mais recente.
/p7 Verifica arquivos PKCS #7. Nenhuma política existente é usada na validação de PKCS #7. SignTool verifica a assinatura e cria uma cadeia para o certificado de autenticação.
/pa Especifica que a Política de Verificação de Autenticação Padrão é usada. Se a opção /pa não for especificada, o SignTool usará a Política de Verificação de Driver do Windows. Essa opção não pode ser usada com as catdb opções.
/pgPolicyGUID Especifica uma política de verificação por GUID. O GUID corresponde ao ActionID da política de verificação. Essa opção não pode ser usada com as catdb opções.
/ph Imprimir e verificar valores de hash de página. Windows Vista e anteriores: não há suporte para essa opção.
/rRootSubjectName Especifica o nome do assunto do certificado raiz em que o certificado de assinatura deve ser encadeado. Esse valor pode ser uma subcadeia de caracteres do nome da entidade inteiro do certificado raiz.
/tw Especifica que o comando gerará um aviso se a assinatura não tiver carimbo de data/hora.

O comando SignTool verify determina se o certificado de autenticação foi emitido por uma autoridade confiável, se o certificado de autenticação foi revogado e, opcionalmente, se o certificado de autenticação é válido para uma política específica.

O comando SignTool verify gera a assinatura inserida status a menos que uma opção seja especificada para pesquisar um catálogo, como /a, /ad, /as, /agou /c.

Valor retornado

SignTool retorna um dos seguintes códigos de saída quando é encerrado.

Código de saída Descrição
0 A execução foi bem-sucedida.
1 A execução falhou.
2 A execução foi concluída com avisos.

Exemplos

O comando a seguir adiciona o arquivo de catálogo MyCatalogFileName.cat ao componente do sistema e ao banco de dados de driver. A /u opção gera um nome exclusivo, se necessário, para impedir a substituição de um arquivo de catálogo existente chamado MyCatalogFileName.cat.

signtool catdb /v /u MyCatalogFileName.cat

O comando a seguir assina um arquivo automaticamente usando-se o melhor certificado.

signtool sign /a /fd SHA256 MyFile.exe 

O comando a seguir assina digitalmente um arquivo usando um certificado armazenado em um arquivo PFX protegido por senha.

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe 

O comando a seguir assina digitalmente e carimba um arquivo. O certificado usado para assinar o arquivo é armazenado em um arquivo PFX.

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe 

O comando a seguir assina um arquivo usando um certificado localizado no armazenamento My que tem um nome de entidade de My Company Certificate.

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe 

O comando a seguir assina um controle ActiveX e fornece informações que são exibidas em um navegador quando o usuário é solicitado a instalar o controle.

signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe 

O tempo de comando a seguir carimba um arquivo que já foi assinado digitalmente.

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

O comando a seguir carimba um arquivo usando um servidor de carimbo de data/hora RFC 3161.

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

O comando a seguir verifica se um arquivo foi assinado.

signtool verify MyFile.exe

O comando a seguir verifica um arquivo do sistema que pode ser conectado a um catálogo.

signtool verify /a SystemFile.dll

O comando a seguir verifica um arquivo de sistema assinado em um catálogo chamado MyCatalog.cat.

signtool verify /c MyCatalog.cat SystemFile.dll