SignTool
SignTool é uma ferramenta de linha de comando que assina digitalmente arquivos, verifica as assinaturas em arquivos, remove as assinaturas de arquivos e carimbos de data/hora. 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 Windows Software Development Kit (SDK). 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, do Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK)e Windows Assessment and Deployment Kit (ADK) compila 20236 e posterior exigem que você especifique o algoritmo digest. 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 lançará um aviso, código de erro 0, inicialmente. Em versões posteriores do SignTool, o aviso torna-se um erro. Recomendamos 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 que especifica uma operação a ser executada em um arquivo: catdb , sign , timestamp ou verify . Para obter uma descrição de cada comando, consulte a tabela a seguir. |
options |
Uma opção que modifica um comando. Além das opções de /q e /v globais, cada comando suporta um conjunto exclusivo de opções. |
file_name |
O caminho para o arquivo a ser assinado. |
SignTool suporta os seguintes comandos:
Comando | Descrição |
---|---|
catdb |
Adiciona um arquivo de catálogo ou o remove de um banco de dados de catálogo. Os bancos de dados de catálogo são usados para pesquisa automática de arquivos de catálogo e são identificados pelo GUID. Para obter uma lista das opções suportadas pelo comando catdb , consulte opções de comando catdb. |
remove |
Remove uma assinatura de um arquivo. Para obter uma lista das opções suportadas pelo comando remove , consulte remover opções de comando. |
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 assinatura. Para obter uma lista das opções suportadas pelo comando sign , consulte assinar opções de comando. |
timestamp |
Arquivos de carimbos de data/hora. Para obter uma lista das opções suportadas pelo comando timestamp , consulte opções de comando de carimbo de data/hora. |
verify |
Verifica a assinatura digital dos ficheiros. Determina se o certificado de assinatura foi emitido por uma autoridade confiável, se o certificado de assinatura foi revogado e, opcionalmente, se o certificado de assinatura é válido para uma política específica. Para obter uma lista das opções suportadas pelo comando verify , consulte verificar opções de comando. |
As seguintes opções se aplicam a todos os comandos do SignTool:
Opção global | Descrição |
---|---|
/q |
Não exibe nenhuma saída se o comando for executado com êxito e exibe saída mínima se o comando falhar. |
/v |
Exibe a saída detalhada, independentemente de o comando ser executado com êxito ou falhar, e exibe mensagens de aviso. |
/debug |
Exibe informações de depuração. |
Opções de 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 que o banco de dados de catálogo padrão é atualizado. Se você não usar /d ou /g , o SignTool atualizará o componente do sistema e o banco de dados de 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 que um nome exclusivo é gerado automaticamente para os arquivos de catálogo adicionados. Se necessário, os arquivos de catálogo são renomeados para evitar conflitos de nome com 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 signatário da assinatura. |
/q |
Nenhuma saída no sucesso e saída mínima no fracasso. Como sempre, o SignTool retorna 0 sobre o sucesso e 1 sobre o fracasso. |
/s |
Remova totalmente a assinatura. |
/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 erros. |
Opções de comando Assinar
A tabela a seguir lista as opções que podem ser usadas com o comando sign
:
Opção de comando Assinar | Descrição |
---|---|
/a |
Seleciona automaticamente o melhor certificado de assinatura. O SignTool localiza todos os certificados válidos que satisfazem todas as condições especificadas e seleciona o que é válido por mais tempo. Se essa opção não estiver presente, o SignTool espera encontrar apenas um certificado de assinatura válido. |
/ac
arquivo |
Adiciona outro certificado de arquivo ao bloco de assinatura. |
/as |
Anexa esta assinatura. Se não existir uma assinatura principal, essa assinatura será transformada na assinatura principal. |
/c
CertTemplateName |
Especifica o Nome do Modelo de Certificado (uma extensão da Microsoft) para o certificado de assinatura. |
/csp
CSPName |
Especifica o provedor de serviços de criptografia (CSP) que contém o contêiner de chave privada. |
/d
Desc |
Especifica uma descrição do conteúdo assinado. |
/dg
Caminho |
Gera o resumo a ser assinado e os arquivos PKCS7 não assinados. Os arquivos de resumo de saída e 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. Os arquivos PKCS7 assinados e resumos assinados de entrada devem ser <Caminho>\<FileName> .dig.signed e <Caminho>\<FileName>.p7u. |
/dlib
DLL |
Especifica a DLL que implementa a função AuthenticodeDigestSign com a qual assinar o resumo. Esta opção é equivalente a usar o SignTool separadamente com as opções /dg , /ds e /di . Esta opção invoca todos os três como uma operação atômica. |
/dmdf
Nome do arquivo |
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 resumo. O arquivo de entrada deve ser o resumo gerado pela opção /dg . O arquivo de saída é: <File>.signed. |
/du
URL |
Especifica um URL (Uniform Resource Locator) para 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. |
/f
SignCertFile |
Especifica o certificado de assinatura em um arquivo. Se o arquivo estiver no formato PFX (Troca de Informações Pessoais) e protegido por uma 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. |
/fd
alg |
Especifica o algoritmo de resumo de arquivo a ser usado para criar 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 assinatura.
Observação: Se a opção /fd não for especificada durante a assinatura, o comando gerará um erro. |
/i
IssuerName |
Especifica o nome do emissor do certificado de assinatura. Esse valor pode ser uma substring de todo o nome do emissor. |
/kc
PrivKeyContainerName |
Especifica o nome do contêiner de chave privada. |
/n
SubjectName |
Especifica o nome do assunto do certificado de assinatura. Esse valor pode ser uma substring do nome do assunto inteiro. |
/nph |
Se suportado, 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. Esta opção é ignorada para ficheiros não PE. |
/p
Palavra-passe |
Especifica a senha a ser usada ao abrir um arquivo PFX. Use a opção /f para especificar um arquivo PFX. |
/p7
Caminho |
Especifica que um arquivo PKCS (Public Key Cryptography Standards) #7 é produzido para cada arquivo de conteúdo especificado. Os arquivos PKCS #7 são nomeados <caminho>\<nome de arquivo>.p7. |
/p7ce
valor |
Especifica opções para o conteúdo PKCS #7 assinado. Defina Value para Embedded incorporar o conteúdo assinado no arquivo PKCS #7 ou para DetachedSignedData para produzir a parte de dados assinados de um arquivo PKCS #7 desanexado. Se a opção /p7ce não for especificada, o conteúdo assinado será incorporado por padrão. |
/p7co
<OID> |
Especifica o identificador de objeto (OID) que identifica o conteúdo PKCS #7 assinado. |
/ph |
Se suportado, gera hashes de página para arquivos executáveis. |
/r
RootSubjectName |
Especifica o nome do assunto do certificado raiz ao qual o certificado de assinatura deve ser encadeado. Esse valor pode ser uma substring de todo o nome do assunto do certificado raiz. |
/s
StoreName |
Especifica o repositório a ser aberto quando o comando procurar o certificado. Se essa opção não for especificada, o comando abrirá o repositório My . |
/sha1
Hash |
Especifica o hash SHA1 do certificado de assinatura. O hash SHA1 é comumente usado quando vários certificados satisfazem os critérios especificados pelas opções restantes. |
/sm |
Especifica que o comando usa um armazenamento de máquina, em vez de um repositório de usuário. |
/t
URL |
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 terá carimbo de data/hora. Se o carimbo de data/hora falhar, o comando gerará um aviso. Esta opção não pode ser usada com a opção /tr . |
/td
alg |
Usado com a opção /tr para solicitar um algoritmo de resumo usado pelo servidor de carimbo de data/hora RFC 3161.
Nota: Se /td não for especificado durante o carimbo de data/hora, o comando gerará um erro. |
/tr
URL |
Especifica a URL do servidor de carimbo de data/hora RFC 3161. Se essa opção ou /t não for especificada, o arquivo assinado não terá carimbo de data/hora. Se o carimbo de data/hora falhar, o comando gerará um aviso. Esta opção não pode ser usada com a opção /t . |
/u
Utilização |
Especifica o uso avançado de chave (EKU) que deve estar presente no certificado de assinatura. O valor de uso pode ser especificado por OID ou string. 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 Usando o 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 |
Carimbos de data/hora arquivos PKCS #7. |
/t
URL |
Especifica a URL do servidor de carimbo de data/hora. O arquivo que está sendo carimbo de data/hora deve ter sido assinado previamente. A opção /t ou /tr é necessária. |
/td
alg |
Usado com a opção /tr para solicitar um algoritmo de resumo usado pelo servidor de carimbo de data/hora RFC 3161.
Nota: Se /td não for especificado durante o carimbo de data/hora, o comando gerará um aviso. |
/tp
índice |
Carimba a hora da assinatura em índice. |
/tr
URL |
Especifica a URL do servidor de carimbo de data/hora RFC 3161. O arquivo que está sendo carimbo de data/hora deve ter sido assinado previamente. A opção /tr ou /t é necessária. |
Verificar opções de comando
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 para verificar o 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 incorporada do arquivo. Recomendamos essa opção ao verificar arquivos que podem ou não estar assinados em um catálogo. Exemplos de arquivos que podem ou não ser assinados incluem arquivos ou drivers do Windows. |
/ad |
Localiza o catálogo usando o banco de dados de catálogo padrão. |
/all |
Verifica todas as assinaturas em um arquivo com várias assinaturas. |
/as |
Localiza o catálogo usando o banco de dados de catálogo do componente do sistema (driver). |
/ag
CatDBGUID |
Localiza o catálogo no banco de dados de catálogo identificado pelo GUID. |
/c
CatFile |
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: esta opção não é suportada. |
/ds
Índice |
Verifica a assinatura em uma determinada posição. |
/hash {SHA1|SHA256} |
Especifica um algoritmo de hash opcional a ser usado ao procurar 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 WinVerifyTrust chamada. |
/o
Versão |
Verifica o arquivo por versão do sistema operacional. O parâmetro version tem o 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 /o , os catálogos de sistema que validam corretamente em um sistema operacional mais antigo podem não validar corretamente em um sistema operacional mais recente. |
/p7 |
Verifica os arquivos PKCS #7. Nenhuma política existente é usada para validação PKCS #7. O SignTool verifica a assinatura e cria uma cadeia para o certificado de assinatura. |
/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. Esta opção não pode ser usada com as opções catdb . |
/pg
PolicyGUID |
Especifica uma política de verificação por GUID. O GUID corresponde ao ActionID da política de verificação. Esta 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: esta opção não é suportada. |
/r
RootSubjectName |
Especifica o nome do assunto do certificado raiz ao qual o certificado de assinatura deve ser encadeado. Esse valor pode ser uma substring de todo o nome do assunto do certificado raiz. |
/tw |
Especifica que o comando gera um aviso se a assinatura não tiver carimbo de data/hora. |
O comando SignTool verify
determina se o certificado de assinatura foi emitido por uma autoridade confiável, se o certificado de assinatura foi revogado e, opcionalmente, se o certificado de assinatura é válido para uma política específica.
O comando SignTool verify
emite 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 de retorno
SignTool retorna um dos seguintes códigos de saída quando termina:
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 do driver. 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 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 a hora de 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 repositório My
que tem um nome de assunto 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 comando a seguir carimba a hora de um arquivo que já foi assinado digitalmente.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
O comando a seguir carimba 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 que está 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