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 , 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 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. |
/g GUID |
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. |
/ac archivo |
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. |
/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 Path |
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 . |
/di Path |
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>. |
/dlib DLL |
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 /dg opciones , /ds y /di . Esta opción invoca las tres como una operación atómica. |
/dmdf Nombre |
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>. |
/du URL |
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. |
/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, use las /csp opciones y /kc para especificar el nombre del contenedor de claves privadas y CSP. |
/fd alg |
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. |
/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 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. |
/p Contraseña |
Especifica la contraseña que se debe utilizar al abrir un archivo PFX. Use la /f opción para especificar un archivo PFX. |
/p7 Path |
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 Valor |
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. |
/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 |
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. |
/sha1 Hash |
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. |
/t URL |
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 . |
/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 /td no se especifica durante la marca de tiempo, el comando genera un error. |
/tr URL |
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 . |
/u Uso |
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. |
/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 /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. |
/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 . |
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). |
/ag CatDBGUID |
Busca el catálogo en la base de datos del catálogo 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 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 . |
/o Versió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 . |
/pg PolicyGUID |
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. |
/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 |
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
, /ag
o /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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de