SignTool
O SignTool é uma ferramenta de linha de comando que assina digitalmente arquivos, verifica as assinaturas em arquivos, remove as assinaturas de arquivos e carimba a data e hora de arquivos. Para obter informações sobre por que a assinatura de arquivos é importante, consulte Introdução à assinatura de código.
O SignTool está disponível como parte do SDK (Software Development Kit) do Windows. A ferramenta é instalada na pasta \Bin
do caminho de instalação do SDK do Windows, por exemplo: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
.
Observação
O SDK do Windows, Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK) e Windows Assessment and Deployment Kit (ADK), builds 20236 e posteriores, exigem que você especifique o algoritmo de digest. O comando sign
do SignTool exige a opção de algoritmo de digest de arquivo (/fd
) e a opção de algoritmo de digest de carimbo de data/hora (/td
) durante a assinatura e o carimbo de data/hora, respectivamente.
Um aviso (código de erro 0, inicialmente) será gerado se /fd
não for especificado durante a assinatura e se /td
não for especificado durante o carimbo de data/hora. Nas versões posteriores do SignTool, o aviso se tornará um erro. Recomendamos o SHA256. É 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 (catdb , sign , timestamp ou verify ) que especifica uma operação a ser realizada em um arquivo. 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 o arquivo a ser assinado. |
O SignTool suporta os 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 de opções com suporte pelo comando catdb , consulte Opções do comando catdb. |
remove |
Remove uma assinatura de um arquivo. Para obter uma lista das opções suportadas pelo comando, consulte remover opções de remove comando. |
sign |
Assina arquivos digitalmente. As assinaturas digitais protegem os arquivos contra violação e permitem aos usuários verificar o signatário com base em um certificado de assinatura. Para obter uma lista de opções com suporte pelo comando sign , consulte Opções do comando sign. |
timestamp |
Arquivos de carimbo de data/hora. Para obter uma lista das opções com suporte pelo comando timestamp , consulte Opções de comando timestamp. |
verify |
Verifica a assinatura digital dos arquivos. Determine se o certificado de assinatura foi emitido por uma autoridade confiável, se o certificado de assinatura foi revogado e, como opção, se o certificado de assinatura é válido para uma política específica. Para obter uma lista das opções com suporte pelo comando verify , consulte Opções do comando verify. |
As seguintes opções aplicam-se a todos os comandos do 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 do comando 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 /d ou /g , o SignTool atualizará o componente do sistema e o banco de dados do driver. |
/g GUID |
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, o 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 do catálogo especificado. |
Observação
Os bancos de dados de catálogo são usados para pesquisa automática de arquivos de catálogo.
Remover opções de comando
A tabela a seguir lista as opções que podem ser usadas com o comando remove
:
Opção Remover | Descrição |
---|---|
/c |
Remova todos os certificados, exceto o certificado de assinante da assinatura. |
/q |
Nenhuma saída em caso de sucesso e saída mínima em caso de falha. Como sempre, o SignTool retorna 0 com sucesso e 1 falha. |
/s |
Remova a assinatura completamente. |
/u |
Remova os atributos não autenticados da assinatura, por exemplo, assinaturas duplas e carimbos de data/hora. |
/v |
Imprima mensagens detalhadas de sucesso e status. Isso também pode fornecer um pouco mais de informações sobre o erro. |
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 encontrará todos os certificados válidos que atendem às condições especificadas e selecionará aquele válido durante um tempo mais longo. Se essa opção não estiver presente, o SignTool deverá localizar apenas um certificado de assinatura válido. |
Arquivo /ac |
Adiciona outro certificado de arquivo ao bloco de assinatura. |
/as |
Acrescenta esta assinatura. Se nenhuma assinatura primária estiver presente, essa assinatura será definida como a assinatura principal. |
CertTemplateName de /c |
Especifica o Nome do Modelo de Certificado (uma extensão da Microsoft) para o certificado de assinatura. |
CSPName de /csp |
Especifica o provedor de serviços de criptografia (CSP) que contém o contêiner de chave privada. |
Desc de /d |
Especifica uma descrição do conteúdo assinado. |
/dg Caminho |
Gera o digest a ser assinado e os arquivos PKCS7 não assinados. O digest de saída e os arquivos PKCS7 são <Path>\<FileName>.dig e <Path>\<FileName>.p7u. Para gerar um arquivo XML extra, use /dxml . |
/di Caminho |
Cria a assinatura ingerindo o resumo assinado no arquivo PKCS7 não assinado. O digest assinado de entrada e os arquivos PKCS7 não assinados devem ser <Path>\<FileName>.dig.signed e <Path>\<FileName>.p7u. |
DLL de /dlib |
Especifica a DLL que implementa a função AuthenticodeDigestSign com a qual assinar o digest. Essa opção é equivalente a usar o SignTool separadamente com as opções /dg , /ds e /di . Essa opção invoca todos os três como uma operação atômica. |
Nome do arquivo de /dmdf |
Quando usado com a opção /dg , passa o conteúdo do arquivo para a função AuthenticodeDigestSign sem modificação. |
/ds |
Assina apenas o digest. O arquivo de entrada deve ser o digest gerado pela opção /dg . O arquivo de saída é: <File>.signed. |
URL de /du |
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. |
SignCertFile de /f |
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 opções /csp e /kc para especificar o CSP e o nome do contêiner de chave privada. |
alg de /fd |
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. |
IssuerName de /i |
Especifica o nome do emissor de certificado de assinatura. Esse valor pode ser uma subcadeia de caracteres do nome do emissor inteiro. |
PrivKeyContainerName de /kc |
Especifica o nome do contêiner de chave privada. |
SubjectName de /n |
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 de wintrust.dll. Essa opção é ignorada para arquivos não PE. |
Password de /p |
Especifica a senha a ser usada durante a abertura de um arquivo PFX. Use a opção /f para especificar um arquivo PFX. |
/p7 Caminho |
Especifica se um arquivo PKCS (Public Key Cryptography Standards) #7 é produzido para cada arquivo de conteúdo especificado. Os arquivos PKCS #7 têm o nome <path>\<filename>.p7. |
Value de /p7ce |
Especifica opções para o conteúdo de PKCS #7 assinado. Defina Value como Embedded para inserir o conteúdo assinado no arquivo PKCS #7 ou como DetachedSignedData para produzir a parte de dados assinada de um arquivo PKCS #7 desanexado. Se a opção /p7ce não for especificada, o conteúdo assinado será inserido por padrão. |
<OID> de /p7co |
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. |
RootSubjectName de /r |
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. |
StoreName de /s |
Especifica o armazenamento a ser aberto quando o comando pesquisa o certificado. Se essa opção não for especificada, o comando abrirá o repositório My . |
Hash de /sha1 |
Especifica o hash SHA1 do certificado de assinatura. O hash SHA1 costuma ser usado quando vários certificados atendem aos critérios especificados pelas opções restantes. |
/sm |
Especifica se um comando usa um armazenamento do computador, em vez de um armazenamento de usuário. |
URL de /t |
Especifica a URL do servidor de carimbo de data/hora. Se essa opção ou /tr não for especificado, o arquivo assinado não terá carimbo de data/hora. 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 . |
alg de /td |
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. |
URL de /tr |
Especifica a URL do servidor do carimbo de data/hora RFC 3161. Se essa opção ou /t não for especificado, o arquivo assinado não terá carimbo de data/hora. 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 . |
Usage de /u |
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 Timestamp
A tabela a seguir lista as opções que podem ser usadas com o comando timestamp
:
Opção do carimbo de data/hora | Descrição |
---|---|
/p7 |
Arquivos PKCS #7 do carimbo de data/hora. |
URL de /t |
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. |
alg de /td |
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. |
index de /tp |
Marca com o carimbo de data/hora a assinatura em index. |
URL de /tr |
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. |
Opções de comando Verify
A tabela a seguir lista as opções que podem ser usadas com o comando verify
:
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 de catálogo para determinar se o arquivo está assinado em um catálogo. Se o arquivo não estiver assinado em nenhum catálogo, o SignTool tentará verificar a assinatura inserida no arquivo. Essa opção é recomendada durante a verificação de arquivos que podem estar ou não assinados em 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). |
CatDBGUID de /ag |
Encontra o catálogo no banco de dados de catálogos identificado pelo GUID. |
CatFile de /c |
Especifica o arquivo de catálogo por nome. |
/d |
Imprime a descrição e o URL de descrição. Windows Vista e versões anteriores: não há suporte para essa opção. |
Index de /ds |
Verifica a assinatura em uma posição especificada. |
/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 é o comportamento padrão de uma chamada WinVerifyTrust. |
Version de /o |
Verifica o arquivo pela versão do sistema operacional. O parâmetro version está no formato: <PlatformID>:<VerMajor>.<VerMinor>.<BuildNumber>. Recomendamos o uso da opção /o . Se /o não for especificado, o SignTool poderá retornar resultados inesperados. Por exemplo, se você não incluir a opção /o , os catálogos do sistema validados corretamente em um sistema operacional anterior poderá não ser validado corretamente em um sistema operacional mais novo. |
/p7 |
Verifica arquivos PKCS #7. Nenhuma política existente é usada na validação de PKCS #7. O SignTool verifica a assinatura e compila uma cadeia para o certificado de assinatura. |
/pa |
Especifica se 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 opções catdb . |
PolicyGUID de /pg |
Especifica uma política de verificação por GUID. O GUID corresponde à ActionID da política de verificação. Essa opção não pode ser usada com as opções catdb . |
/ph |
Imprima e verifique os valores de hash da página. Windows Vista e versões anteriores: não há suporte para essa opção. |
RootSubjectName de /r |
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 se o comando gerará um aviso se a assinatura não receber carimbo de data/hora. |
O comando verify
do SignTool determina se o certificado de assinatura foi emitido por uma autoridade confiável, se o certificado de assinatura foi revogado e, como opção, se o certificado de assinatura é válido para uma política específica.
O comando verify
do SignTool gera o status da assinatura incorporada, a menos que uma opção seja especificada para pesquisar um catálogo, como /a
, /ad
, /as
, /ag
ou /c
.
Valor retornado
O SignTool retorna um dos códigos de saída a seguir quando é encerrada:
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 aos bancos de dados do componente e de driver do sistema. A opção /u
gera um nome exclusivo, se necessário, para evitar 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 coloca carimbos de data/hora em 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 exibidas em um navegador quando o usuário deve instalar o controle.
signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe
O comando a seguir marca um arquivo com carimbos de data/hora já assinado digitalmente.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
O comando a seguir marca a hora de 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 de sistema que pode ser assinado em 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
O comando a seguir remove completamente a assinatura de um arquivo.
signtool remove /s MyFile.exe