SignTool

SignTool es una herramienta de línea de comandos que firma digitalmente archivos, comprueba las firmas en los archivos y los archivos de marcas de tiempo. Para obtener información sobre por qué es importante firmar archivos, vea Introducción a la firma de código.

La herramienta se instala en la carpeta \Bin de la ruta de instalación del Kit de desarrollo de software (SDK) de Microsoft Windows, por ejemplo: C:\Archivos de programa (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe.

SignTool está disponible como parte del SDK de Windows, que puede descargar desde Windows SDK.

Nota

El SDK de Windows 10, Windows 10 HLK, Windows 10 WDK y Windows 10 compilaciones de ADK 20236 y versiones posteriores requieren que especifique el algoritmo de resumen. El comando SignTool sign requiere la opción de algoritmo de resumen de archivo (/fd) y la opción de algoritmo de resumen de marca de tiempo (/td) durante la firma y la marca de tiempo, respectivamente.

Si /fd no se especifica durante la firma y si /td no se especifica durante la marca de tiempo, el comando produce una advertencia, el código de error 0, inicialmente. En versiones posteriores de SignTool, la advertencia se convierte en un error. Se recomienda SHA256. Se considera más seguro que SHA1 por la industria.

Sintaxis

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

Parámetros

Argumento Descripción
command Uno de los cuatro comandos que especifica una operación que se va a realizar en un archivo: catdb, sign, timestampo verify. Para obtener una descripción de cada comando, vea la tabla siguiente.
options Una opción que modifica un comando. Además de las opciones globales /q y /v, cada comando admite un conjunto único de opciones.
file_name Ruta de acceso a un archivo que se va a firmar.

SignTool admite los siguientes comandos:

Get-Help Descripción
catdb Agrega un archivo de catálogo a una base de datos de catálogo o bien lo quita de esta. Las bases de datos de catálogo se utilizan para la búsqueda automática de archivos de catálogo y se identifican mediante un GUID. Para obtener una lista de las opciones admitidas por el catdb comando, consulte las opciones del comando catdb.
sign Firma archivos digitalmente. Las firmas digitales protegen los archivos contra alteraciones y permiten a los usuarios comprobar el firmante en función de un certificado de firma. Para obtener una lista de las opciones admitidas por el sign comando, consulte Opciones de comando de firma.
timestamp Archivos de marcas de tiempo. Para obtener una lista de las opciones admitidas por el timestamp comando, consulte timestamp command options (Opciones de comando de marca de tiempo).
verify Comprueba la firma digital de los archivos. Determina si una entidad de confianza emitió el certificado de firma, si el certificado de firma se ha revocado y, opcionalmente, si el certificado de firma es válido para una directiva específica. Para obtener una lista de las opciones admitidas por el verify comando, consulte verify command options (Comprobar opciones de comando).

Las siguientes opciones se aplican a todos los comandos signTool.

Opción global Descripción
/q No muestra ninguna salida si el comando se ejecuta correctamente y muestra el resultado mínimo si se produce un error en el comando.
/v Muestra resultados detallados independientemente de si el comando se ejecuta correctamente o no y muestra mensajes de advertencia.
/debug Muestra información de depuración.

Opciones de comandos de Catdb

En la tabla siguiente se enumeran las opciones que se pueden utilizar con el comando catdb.

Opción de catdb Descripción
/d Especifica que se actualiza la base de datos de catálogo predeterminada. Si no usa ni /d/g, SignTool actualiza el componente del sistema y la base de datos del controlador.
/gGUID Especifica que se actualiza la base de datos de catálogo identificada por el GUID.
/r Quita el catálogo especificado de la base de datos de catálogo. Si no se especifica esta opción, SignTool agrega el catálogo especificado a la base de datos de catálogo.
/u Especifica que se genera un nombre único automáticamente para los archivos de catálogo agregados. Si es necesario, a los archivos de catálogo se les cambia el nombre para evitar que se produzcan conflictos de nombre con archivos de catálogo existentes. Si no se especifica esta opción, SignTool sobrescribe cualquier catálogo existente que tenga el mismo nombre que el catálogo especificado.

Nota

Las bases de datos de catálogo se usan para la búsqueda automática de archivos de catálogo.

Opciones del comando Sign

En la tabla siguiente se enumeran las opciones que se pueden utilizar con el comando sign.

Opción del comando sign Descripción
/a Selecciona automáticamente el mejor certificado de firma. SignTool busca todos los certificados válidos que cumplen todas las condiciones especificadas y selecciona el que es válido durante el tiempo más largo. Si esta opción no está presente, SignTool espera encontrar solo un certificado de firma válido.
/acarchivo Agrega otro certificado del archivo al bloque de firma.
/as Anexa esta signatura. Si no existe ninguna firma principal, esta firma se convierte en la firma principal en su lugar.
/cCertTemplateName Especifica el nombre de plantilla de certificado (una extensión de Microsoft) para el certificado de firma.
/cspCSPName Especifica el proveedor de servicios criptográficos (CSP) que contiene el contenedor de claves privadas.
/dDesc Especifica una descripción del contenido firmado.
/dgPath Genera el resumen que se va a firmar y los archivos PKCS7 sin firmar. El resumen de salida y los archivos PKCS7 son <Path>\<FileName.dig> y <Path>\<FileName.p7u>. Para generar un archivo XML adicional, use /dxml.
/diPath Crea la firma mediante la ingesta del resumen firmado en el archivo PKCS7 sin firmar. El resumen firmado de entrada y los archivos PKCS7 sin firmar deben ser <Path>\<FileName.dig.signed> y <Path>\<FileName.p7u>.
/dlibDLL Especifica el archivo DLL que implementa la AuthenticodeDigestSign función con la que firmar el resumen. Esta opción equivale a usar SignTool por separado con las /dgopciones , /dsy /di . Esta opción invoca las tres como una operación atómica.
/dmdfNombre Cuando se usa con la /dg opción , pasa el contenido del archivo a la AuthenticodeDigestSign función sin modificaciones.
/ds Firma solo el resumen. El archivo de entrada debe ser el resumen generado por la /dg opción . El archivo de salida es: <File.signed>.
/duURL Especifica el localizador uniforme de recursos (URL) de la descripción ampliada del contenido firmado.
/dxml Cuando se usa con la /dg opción , genera un archivo XML. El archivo de salida es: <Path>\<FileName>.dig.xml.
/fSignCertFile Especifica el certificado de firma en un archivo. Si el archivo está en formato de intercambio de información personal (PFX) y protegido por una contraseña, utilice la opción /p para especificar la contraseña. Si el archivo no contiene claves privadas, use las /csp opciones y /kc para especificar el nombre del contenedor de claves privadas y CSP.
/fdalg Especifica el algoritmo de resumen de archivo que se va a usar para crear signaturas de archivo. Nota: Si no se especifica la opción durante la /fd firma, el comando genera un error.
/fd certHash Especificar la cadena "certHash" hace que el comando use el algoritmo especificado en el certificado de firma. Nota: Si no se especifica la opción durante la /fd firma, el comando genera un error.
/iIssuerName Especifica el nombre del emisor del certificado de firma. Este valor puede corresponder a una subcadena del nombre del emisor completo.
/kcPrivKeyContainerName Especifica el nombre del contenedor de claves privadas.
/nSubjectName Especifica el nombre del sujeto del certificado de firma. Este valor puede corresponder a una subcadena del nombre del sujeto completo.
/nph Si se admite, suprime los hash de página para los archivos ejecutables. El valor predeterminado viene determinado por la variable de entorno SIGNTOOL_PAGE_HASHES y por la versión dewintrust.dll . Esta opción se omite para los archivos sin PE.
/pContraseña Especifica la contraseña que se debe utilizar al abrir un archivo PFX. Use la /f opción para especificar un archivo PFX.
/p7Path Especifica que se genera un archivo PKCS (Estándares de criptografía de clave pública) #7 para cada archivo de contenido especificado. Los archivos PKCS #7 se denominan <path>\<filename.p7>.
/p7ceValor Especifica opciones para el contenido PKCS #7 firmado. Establezca ValorEmbedded en para insertar el contenido firmado en el archivo PKCS #7 o para DetachedSignedData generar la parte de datos firmados de un archivo PKCS #7 desasociado. Si no se especifica la /p7ce opción, el contenido firmado se incrusta de forma predeterminada.
/p7co<OID> Especifica el identificador de objeto (OID) que identifica el contenido PKCS #7 firmado.
/ph Si se admite, genera los hash de página para los archivos ejecutables.
/rRootSubjectName Especifica el nombre del sujeto del certificado raíz al que el certificado de firma debe encadenarse. Este valor puede corresponder a una subcadena del nombre del sujeto completo del certificado raíz.
/sStoreName Especifica el almacén que se va a abrir cuando el comando busca el certificado. Si no se especifica esta opción, el comando abre el My almacén.
/sha1Hash Especifica el hash SHA1 del certificado de firma. El hash SHA1 se usa normalmente cuando varios certificados cumplen los criterios especificados por las opciones restantes.
/sm Especifica que el comando usa un almacén de máquinas, en lugar de un almacén de usuarios.
/tURL Especifica la dirección URL del servidor con marca de tiempo. Si no se especifica esta opción o /tr no se especifica, el archivo firmado no se marca de tiempo. Si se produce un error en la marca de tiempo, el comando genera una advertencia. Esta opción no se puede usar con la /tr opción .
/tdalg Se utiliza con la opción /tr para solicitar un algoritmo de resumen utilizado por el servidor de marca de tiempo RFC 3161. Nota: Si /td no se especifica durante la marca de tiempo, el comando genera un error.
/trURL Especifica la dirección URL del servidor con marca de tiempo RFC 3161. Si no se especifica esta opción o /t no se especifica, el archivo firmado no se marca de tiempo. Si se produce un error en la marca de tiempo, el comando genera una advertencia. Esta opción no se puede usar con la /t opción .
/uUso Especifica el uso mejorado de clave (EKU) que debe encontrarse en el certificado de firma. El valor de uso se puede especificar mediante un identificador de objetos (OID) o una cadena. El uso predeterminado es Code Signing o 1.3.6.1.5.5.7.3.3.
/uw Especifica el uso de Windows System Component Verification o 1.3.6.1.4.1.311.10.3.6.

Para obtener ejemplos de uso, vea Using SignTool to Sign a File (Usar SignTool para firmar un archivo).

Opciones del comando Marca de tiempo

En la tabla siguiente se enumeran las opciones que se pueden utilizar con el comando timestamp.

Opción marca de tiempo Descripción
/p7 Agrega marcas de tiempo a archivos PKCS #7.
/tURL Especifica la dirección URL del servidor con marca de tiempo. El archivo al que se va a agregar la marca de tiempo se debe haber firmado previamente. Se requiere la opción /t o /tr.
/tdalg Se utiliza con la opción /tr para solicitar un algoritmo de resumen utilizado por el servidor de marca de tiempo RFC 3161. Nota: Si /td no se especifica durante la marca de tiempo, el comando genera una advertencia.
/tpíndice Agrega una marca de tiempo a la signatura en index.
/trURL Especifica la dirección URL del servidor con marca de tiempo RFC 3161. El archivo al que se va a agregar la marca de tiempo se debe haber firmado previamente. Se requiere la opción /tr o /t.

Comprobación de las opciones de comando

Opción de Verify Descripción
/a Especifica que todos los métodos se puedan utilizar para comprobar el archivo. En primer lugar, SignTool busca en las bases de datos del catálogo para determinar si el archivo ha iniciado sesión en un catálogo. Si el archivo no ha iniciado sesión en ningún catálogo, SignTool intenta comprobar la firma incrustada del archivo. Se recomienda esta opción al comprobar los archivos que podrían o no haber iniciado sesión en un catálogo. Algunos ejemplos de archivos que podrían o no estar firmados incluyen archivos o controladores de Windows.
/ad Busca el catálogo utilizando la base de datos de catálogo predeterminada.
/all Comprueba todas las firmas de un archivo con varias firmas.
/as Busca el catálogo utilizando la base de datos de catálogo de componentes del sistema (controlador).
/agCatDBGUID Busca el catálogo en la base de datos del catálogo identificada por el GUID.
/cCatFile Especifica el archivo de catálogo por nombre.
/d Imprime la descripción y la dirección URL de descripción. Windows Vista y versiones anteriores: esta opción no se admite.
/dsÍndice Comprueba la firma en una posición determinada.
/hash{SHA1|SHA256} Especifica un algoritmo hash opcional que se usará al buscar un archivo en un catálogo.
/kp Realiza la comprobación mediante la directiva de firma de controladores en modo kernel x64.
/ms Utiliza la semántica de comprobación múltiple. Este comportamiento es el valor predeterminado de una llamada a WinVerifyTrust .
/oVersión Comprueba el archivo por versión del sistema operativo. El parámetro de versión tiene el formato:< PlatformID>:<VerMajor>.< VerMinor>.< BuildNumber>. Se recomienda usar la /o opción . Si /o no se especifica , SignTool podría devolver resultados inesperados. Por ejemplo, si no incluye /o, es posible que los catálogos del sistema que se validen correctamente en un sistema operativo anterior no se validen correctamente en un sistema operativo más reciente.
/p7 Comprueba los archivos PKCS #7. No se usa ninguna directiva existente para la validación de PKCS #7. SignTool comprueba la firma y crea una cadena para el certificado de firma.
/pa Especifica que se usa la directiva de comprobación de autenticación predeterminada. Si no se especifica la /pa opción, SignTool usa la directiva de comprobación de controladores de Windows. Esta opción no se puede usar con las catdb opciones .
/pgPolicyGUID Especifica una directiva de comprobación por GUID. El GUID corresponde a de ActionID la directiva de verificación. Esta opción no se puede usar con las catdb opciones .
/ph Imprima y compruebe los valores hash de página. Windows Vista y versiones anteriores: esta opción no se admite.
/rRootSubjectName Especifica el nombre del sujeto del certificado raíz al que el certificado de firma debe encadenarse. Este valor puede corresponder a una subcadena del nombre del sujeto completo del certificado raíz.
/tw Especifica que el comando genera una advertencia si la firma no tiene marca de tiempo.

El comando SignTool verify determina si una entidad de confianza emitió el certificado de firma, si el certificado de firma se ha revocado y, opcionalmente, si el certificado de firma es válido para una directiva específica.

El comando SignTool verify genera el estado de la firma incrustada a menos que se especifique una opción para buscar en un catálogo, como /a, /ad, /as, /ago /c.

Valor devuelto

SignTool devuelve uno de los siguientes códigos de salida cuando finaliza.

Código de salida Descripción
0 La ejecución se realizó correctamente.
1 Error en la ejecución.
2 La ejecución ha finalizado con advertencias.

Ejemplos

El comando siguiente agrega el archivo de catálogo MyCatalogFileName.cat al componente del sistema y a la base de datos del controlador. La /u opción genera un nombre único si es necesario para evitar reemplazar un archivo de catálogo existente denominado MyCatalogFileName.cat.

signtool catdb /v /u MyCatalogFileName.cat

El comando siguiente firma un archivo automáticamente y para ello usa el mejor certificado.

signtool sign /a /fd SHA256 MyFile.exe 

El comando siguiente firma un archivo digitalmente con un certificado almacenado en un archivo PFX protegido por contraseña.

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

El siguiente comando firma digitalmente y marca de tiempo un archivo. El certificado utilizado para firmar el archivo se almacena en un archivo PFX.

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

El comando siguiente firma un archivo con un certificado ubicado en el almacén My cuyo nombre de sujeto sea My Company Certificate.

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

El siguiente comando firma un control ActiveX y proporciona información que se muestra en un explorador cuando se le pide al usuario que instale el control.

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

El siguiente comando marca un archivo que ya se ha firmado digitalmente.

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

El siguiente comando marca un archivo con un servidor de marca de tiempo RFC 3161.

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

El comando siguiente comprueba que se ha firmado un archivo.

signtool verify MyFile.exe

El siguiente comando comprueba un archivo del sistema que se puede firmar en un catálogo.

signtool verify /a SystemFile.dll

El comando siguiente comprueba un archivo del sistema firmado en un catálogo denominado MyCatalog.cat.

signtool verify /c MyCatalog.cat SystemFile.dll