SignTool
SignTool es una herramienta de línea de comandos que firma digitalmente los archivos, comprueba las firmas de los archivos, quita las firmas de los archivos y los archivos de marcas de tiempo. Para obtener información sobre por qué es importante firmar archivos, consulte Introducción a las firmas de códigos.
SignTool está disponible como parte del Kit de desarrollo de software (SDK) de Windows . La herramienta se instala en la carpeta \Bin
de la ruta de instalación de Windows SDK, por ejemplo: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
.
Nota:
Las compilaciones 20236 y versiones posteriores de Windows SDK, del Kit de laboratorio de hardware (HLK) de Windows, del Kit para controladores de Windows (WDK) y de Windows Assessment and Deployment Kit (ADK) requieren que se especifique el algoritmo de resumen. El comando sign
de SignTool requiere la opción de algoritmo de compilación de archivo (/fd
) y la opción de algoritmo de compilación de marca de tiempo (/td
) durante la firma y la marca de tiempo, respectivamente.
Si no se indica /fd
durante la firma y si no se indica /td
durante la marca de tiempo, saldrá inicialmente una advertencia en el comando, con código de error 0. En versiones posteriores de SignTool, la advertencia pasará a ser un error. Se recomienda SHA256. El sector lo considera más seguro que SHA1.
Sintaxis
signtool [command] [options] [file_name | ...]
Parámetros
Argumento | Descripción |
---|---|
command |
Uno de los cuatro comandos que especifica una operación para realizar en un archivo: catdb , sign , timestamp o 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 al archivo que se va a firmar. |
SignTool admite los siguientes comandos:
Comando | 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 ver la lista de las opciones admitidas por el comando catdb , consulte Opciones del comando catdb. |
remove |
Quita una firma de un archivo. Para obtener una lista de las opciones admitidas por el remove comando, vea Quitar opciones de comando. |
sign |
Firma archivos digitalmente. Las firmas digitales protegen los archivos frente a la manipulación y permiten a los usuarios verificar al firmante en función del certificado de firma. Para ver la lista de las opciones admitidas por el comando sign , consulte Opciones del comando sign. |
timestamp |
Asigna marcas de tiempo a archivos. Para ver la lista de las opciones admitidas por el comando timestamp , consulte Opciones del comando timestamp. |
verify |
Comprueba la firma digital de los archivos. Determina si una autoridad de confianza ha emitido el certificado de firma, si se ha revocado y, opcionalmente, si es válido para una directiva determinada. Para ver la lista de las opciones admitidas por el comando verify , consulte Opciones del comando verify. |
Las opciones siguientes se aplican a todos los comandos de la herramienta 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 del comando 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 ni /g , SignTool actualizará el componente del sistema y la base de datos de controladores. |
/g GUID |
Indica que se ha actualizado la base de datos de catálogo identificada por el GUID. |
/r |
Quita el catálogo correspondiente de la base de datos de catálogo. Si no se especifica esta opción, la herramienta SignTool agregará el catálogo indicado 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, la herramienta SignTool sobrescribirá cualquier catálogo existente que tenga el mismo nombre que el catálogo indicado. |
Nota:
Las bases de datos de catálogo se utilizan para la búsqueda automática de archivos de catálogo.
Quitar opciones de comando
En la tabla siguiente se enumeran las opciones que se pueden utilizar con el comando remove
:
Quitar opción | Descripción |
---|---|
/c |
Quite todos los certificados, excepto el certificado del firmante de la firma. |
/q |
No hay salida correcta ni salida mínima en caso de error. Como siempre, SignTool devuelve 0 el éxito y 1 el error. |
/s |
Quite la firma por completo. |
/u |
Quite los atributos no autenticados de la firma, por ejemplo, firmas duales y marcas de tiempo. |
/v |
Imprima mensajes de estado y correcto detallados. Esto también puede proporcionar algo más información sobre el error. |
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 cumplan todas las condiciones especificadas y selecciona el que sea válido durante más tiempo. Si no sale esta opción, SignTool solo esperar encontrar un certificado de firma válido. |
/ac file |
Agrega otro certificado adicional del archivo al bloque de firma. |
/as |
Anexa esta firma. Si no hay ninguna firma principal, esta se convertirá en la principal. |
/c CertTemplateName |
Especifica el nombre de plantilla de certificado (una extensión de Microsoft) para el certificado de firma. |
/csp CSPName |
Especifica el proveedor de servicios criptográficos (CSP) que contiene el contenedor de claves privadas. |
/d Desc |
Especifica una descripción del contenido firmado. |
/dg Ruta de acceso |
Genera la compilación que se va a firmar y los archivos PKCS7 sin firmar. La compilación final y los archivos PKCS7 son <Path>\<FileName>.dig y <Path>\<FileName>.p7u. Para generar un archivo XML adicional, use /dxml . |
/di Ruta de acceso |
Crea la firma procesando la compilación firmada en el archivo PKCS7 sin firmar. La compilación firmada de entrada y los archivos PKCS7 sin firmar deben ser <Path>\<FileName>.dig.signed y <Path>\<FileName>.p7u. |
/dlib DLL |
Indica el archivo DLL que implementa la función AuthenticodeDigestSign con la que firmar la compilación. Esta opción equivale a usar SignTool por separado con las opciones /dg , /ds y /di . Esta opción invoca las tres como una operación atómica. |
/dmdf Filename (nombre de archivo) |
Cuando se usa con la opción /dg , pasa el contenido del archivo a la función AuthenticodeDigestSign sin modificaciones. |
/ds |
Firma solo la compilación. El archivo de entrada debe ser la compilación generada por la opción /dg . El archivo final es: <File>.signed. |
/du URL |
Especifica el localizador uniforme de recursos (URL) de la descripción ampliada del contenido firmado. |
/dxml |
Cuando se usa con la opción /dg , genera un archivo XML. El archivo final es: <Path>\<FileName>.dig.xml. |
/f SignCertFile |
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, utilice las opciones /csp y /kc para especificar el CSP y el nombre de contenedor de claves privadas, respectivamente. |
/fd alg |
Especifica el algoritmo de resumen de archivo que se va a usar para crear firmas de archivo. Nota: Si no se indica la opción /fd mientras se hace la firma, el comando generará un error. |
/fd certHash |
Si se indica la cadena "certHash", el comando utilizará el algoritmo especificado en el certificado de firma. Nota: Si no se indica la opción /fd mientras se hace la firma, el comando generará un error. |
/i IssuerName |
Especifica el nombre del emisor del certificado de firma. Este valor puede corresponder a una subcadena del nombre del emisor completo. |
/kc PrivKeyContainerName |
Especifica el nombre del contenedor de claves privadas. |
/n SubjectName |
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 definido por la variable de entorno SIGNTOOL_PAGE_HASHES y por la versión wintrust.dll. Esta opción se omite para los archivos sin PE. |
/p Password |
Especifica la contraseña que se debe utilizar al abrir un archivo PFX. Utilice la opción /f para especificar un archivo PFX. |
/p7 Ruta de acceso |
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. |
/p7ce Value |
Especifica opciones para el contenido PKCS #7 firmado. Cambie Value por Embedded para insertar el contenido firmado en el archivo PKCS #7 o por DetachedSignedData para mostrar la parte de datos firmados de un archivo PKCS #7 desvinculado. Si no se indica la opción /p7ce , 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. |
/r RootSubjectName |
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. |
/s StoreName |
Indica el almacén que se va a abrir cuando el comando busca el certificado. Si no se indica esta opción, el comando abrirá el almacén My . |
/sha1 Hash |
Especifica el hash SHA1 del certificado de firma. El hash SHA1 se utiliza normalmente cuando varios certificados cumplen los criterios especificados por las opciones restantes. |
/sm |
Indica que el comando utiliza un almacén de equipo, en lugar de un almacén de usuario. |
/t URL |
Especifica la dirección URL del servidor con marca de tiempo. Si no se indican esta opción o /tr , el archivo firmado no tendrá la marca de tiempo. Si se produce un error en la marca de tiempo, el comando generará una advertencia. Esta opción no se puede combinar con la opción /tr . |
/td alg |
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 no se indica /td al poner la marca de tiempo, el comando generará un error. |
/tr URL |
Especifica la dirección URL del servidor con marca de tiempo RFC 3161. Si no se indican esta opción o /t , el archivo firmado no tendrá la marca de tiempo. Si se produce un error en la marca de tiempo, el comando generará una advertencia. Esta opción no se puede combinar con la opción /t . |
/u Usage |
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 |
Indica 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 timestamp
En la tabla siguiente se enumeran las opciones que se pueden utilizar con el comando timestamp
:
Opción timestamp | Descripción |
---|---|
/p7 |
Agrega marcas de tiempo a archivos PKCS #7. |
/t URL |
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 . |
/td alg |
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 no se indica /td al poner la marca de tiempo, el comando generará una advertencia. |
/tp index |
Agrega una marca de tiempo a la firma en index. |
/tr URL |
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 . |
Opciones del comando verify
En la tabla siguiente se enumeran las opciones que se pueden utilizar con el comando verify
:
Opción de Verify | Descripción |
---|---|
/a |
Especifica que todos los métodos se puedan utilizar para comprobar el archivo. Primero, SignTool busca las bases de datos de catálogo para determinar si el archivo se firma en un catálogo. Si el archivo no se firma en un catálogo, SignTool intenta comprobar la firma incrustada del archivo. Recomendamos esta opción a la hora de comprobar si se pueden o no firmar archivos en un catálogo. Entre algunos ejemplos de archivos que se pueden firmar, están los archivos o los 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). |
/ag CatDBGUID |
Busca el catálogo en la base de datos de catálogos identificada por el GUID. |
/c CatFile |
Especifica el archivo de catálogo por nombre. |
/d |
Imprime la descripción y la dirección URL de la descripción. Windows Vista y versiones anteriores: esta opción no es compatible. |
/ds Index |
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 es la acción predeterminada de una llamada a WinVerifyTrust. |
/o Version |
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 opción /o . Si no se indica /o , SignTool puede devolver resultados inesperados. Por ejemplo, si no incluye /o , los catálogos del sistema que se validan correctamente en un sistema operativo anterior pueden no validarse 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 se genera una cadena para el certificado de firma. |
/pa |
Indica que se debe usar la directiva de comprobación de autenticación predeterminada. Si no se indica la opción /pa , SignTool utilizará la directiva de comprobación de controladores de Windows. Esta opción no se puede combinar con las opciones catdb . |
/pg PolicyGUID |
Especifica una directiva de comprobación por GUID. El GUID equivale al ActionID de la directiva de comprobación. Esta opción no se puede combinar con las opciones catdb . |
/ph |
Imprima y compruebe los valores hash de página. Windows Vista y versiones anteriores: esta opción no es compatible. |
/r RootSubjectName |
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 |
Indica que el comando genera una advertencia si la firma no tiene marca de tiempo. |
El comando verify
de SignTool determina si una autoridad de confianza ha emitido el certificado de firma, si se ha revocado y, opcionalmente, si es válido para una directiva determinada.
El comando verify
de SignTool genera el estado de la firma incrustada a menos que se indique la opción para buscar en un catálogo, como /a
, /ad
, /as
, /ag
o /c
.
Valor devuelto
SignTool devuelve uno de los siguientes códigos de salida al finalizar:
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 la base de datos de controladores. La opción /u
genera un nombre único si es necesario para impedir que se reemplace 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 comando siguiente firma digitalmente un archivo y le agrega una marca de tiempo. 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 comando siguiente firma un control ActiveX y da información que aparece en un navegador 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 comando siguiente agrega una marca de tiempo a un archivo que ya se ha firmado digitalmente.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
El comando siguiente agrega una marca de tiempo a un archivo mediante 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 comando siguiente comprueba si un archivo del sistema 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
El siguiente comando quita completamente la firma de un archivo.
signtool remove /s MyFile.exe