Firmar un archivo EXE de Windows


180

Tengo un archivo EXE que me gustaría firmar para que Windows no avise al usuario final sobre una aplicación de un "editor desconocido". No soy un desarrollador de Windows. La aplicación en cuestión es un protector de pantalla generado a partir de una aplicación que genera aplicaciones de protector de pantalla. Como tal, no tengo influencia sobre cómo se genera el archivo.

Ya descubrí que necesitaré un certificado de firma de código de una CA como Verisign o instantssl.com. Lo que no entiendo es lo que tengo que hacer (si es posible) para firmar mi archivo EXE. ¿Qué es una explicación simple?

La respuesta de Mel Green me llevó más lejos, pero signtool quiere que especifique qué certificado usar en cualquier caso. ¿Puedo obtener un certificado de firma de código gratuito de alguna manera para probar si esto me funcionará?

También especifique qué tipo de certificado es el correcto. La mayoría de los sitios solo mencionan la "firma de código" y hablan sobre las aplicaciones de firma que realmente compila el usuario. Este no es el caso para mí.


3
Simplemente curioso: ¿cuánto hay que pagar para comprar un certificado?
InTheNameOfScience

2
@Rigel aproximadamente $ 400 al año, probablemente no valen :)
Sharan Arumugam

@SharanArumugam: ¿QUE ?????? ¡Es como si Microsfot estuviera en contra del software barato / libre!
InTheNameOfScience

Respuestas:


116

Puedes intentar usar la herramienta de firma de Microsoft

Lo descarga como parte del SDK de Windows para Windows Server 2008 y .NET 3.5. Una vez descargado, puede usarlo desde la línea de comandos de la siguiente manera:

signtool sign / a MyFile.exe

Esto firma un único ejecutable, utilizando el "mejor certificado" disponible. (Si no tiene certificado, mostrará un mensaje de error de SignTool).

O puedes probar:

asistente de señal signtool

Esto lanzará un asistente que lo guiará a través de la firma de su aplicación. (Esta opción no está disponible después de Windows SDK 7.0).


Si desea obtener un certificado que puede usar para probar su proceso de firma del ejecutable, puede usar la herramienta .NET Makecert .

Herramienta de creación de certificados (Makecert.exe)

Una vez que haya creado su propio certificado y lo haya usado para firmar su ejecutable, deberá agregarlo manualmente como CA raíz confiable para su máquina para que UAC le diga al usuario que lo ejecuta que es de una fuente confiable. Importante . Instalar un certificado como ROOT CA pondrá en peligro la privacidad de sus usuarios. Mira lo que pasó con DELL. Puede encontrar más información para lograr esto tanto en código como a través de Windows en:

¡Espero que eso proporcione más información para cualquiera que intente hacer esto!


Un flujo de trabajo en cuestión por separado: stackoverflow.com/questions/84847/…
The_Ghost

44
"Esta herramienta se instala automáticamente con Visual Studio. Para ejecutar la herramienta, use el símbolo del sistema del desarrollador (o el símbolo del sistema de Visual Studio en Windows 7)". msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92

Muy curioso sobre el certificado utilizado por signtool también.
Overdrivr

1
opción "signwizard" no está disponible después de que Windows SDK 7.0
Omar Reis

Makecert ha quedado en desuso y se debe usar un cmdlet de PowerShell New-SelfSignedCertificate para crear un certificado de prueba. Detalles en stackoverflow.com/a/51443366/38117911 (respuesta a una pregunta vinculada por The_Ghost).
Alexander Revo

35

Tuve el mismo escenario en mi trabajo y aquí están nuestros hallazgos

Lo primero que debe hacer es obtener el certificado e instalarlo en su computadora, puede comprar uno de una Autoridad de Certificación o generar uno usando makecert .

Aquí están los pros y los contras de las 2 opciones

Comprar un certificado

  • Pros
    • El uso de un certificado emitido por una CA (Autoridad de certificación) garantizará que Windows no advierta al usuario final sobre una aplicación de un "editor desconocido" en cualquier computadora que use el certificado de la CA (el sistema operativo normalmente viene con los certificados raíz de muchas CA )
  • Contras:
    • Hay un costo involucrado en obtener un certificado de una CA

Generar un certificado usando Makecert

  • Pros:
    • Los pasos son sencillos y puede compartir el certificado con los usuarios finales.
  • Contras:
    • Los usuarios finales tendrán que instalar manualmente el certificado en sus máquinas y, dependiendo de sus clientes, eso podría no ser una opción
    • Los certificados generados con makecert se utilizan normalmente para el desarrollo y las pruebas, no para la producción.

Firma el archivo ejecutable

Hay dos formas de firmar el archivo que desea:

  • Usando un certificado instalado en la computadora

    signtool.exe sign / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.dll"

    • En este ejemplo, estamos utilizando un certificado almacenado en la carpeta Personal con una huella digital SHA1 (esta huella digital proviene del certificado) para firmar el archivo ubicado en "C: \ filename.dll"
  • Usando un archivo de certificado

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ path \ to \ mycert.pfx" / p pfxpassword "c: \ path \ to \ file.exe"

    • En este ejemplo, estamos utilizando el certificado "c: \ path \ to \ mycert.pfx" con la contraseña pfxpassword para firmar el archivo "c: \ path \ to \ file.exe"

Pon a prueba tu firma

Método 1: usar signtool

Vaya a: Inicio> Ejecutar tipo CMD> haga clic en Aceptar En el símbolo del sistema, ingrese el directorio donde existe signtool Ejecute lo siguiente:

signtool.exe verificar / pa / v "C: \ filename.dll"

Método 2: usar Windows

Haga clic con el botón derecho en el archivo firmado Seleccionar propiedades Seleccione la pestaña Firmas digitales. La firma se mostrará en la sección Lista de firmas.

Espero que esto te pueda ayudar

Fuentes:


Me alegro de poder ayudar a @PhilLab
Erick Castrillo

Por favor, también dar $$$ estimado. ¡Gracias!
InTheNameOfScience

1
@WeGoToMars Creo que este artículo puede ayudarlo a tacañossseguridad.com / sslproducts / codesigningcertificate.html o aquí digicert.com/code-signing
Erick Castrillo

31

Puede obtener un certificado de firma de código barato y gratuito de Certum si está realizando un desarrollo de código abierto.

He estado usando su certificado durante más de un año, y elimina el mensaje desconocido del editor de Windows.

En cuanto al código de firma, uso signtool.exe de un script como este:

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe

3
Ya no parece gratis, sigue siendo mucho más barato, € 14
hultqvist

1
Tienes razón, ya no parece libre. acabo de renovar y no pagué nada. Tal vez estoy protegido. Tal vez sus procesos internos están rotos. Su sitio web seguro es complicado.
Lee Richardson el


La tienda Certum dice que su certificado de código abierto NO eliminará el mensaje del filtro Microsoft SmartScreen.
Markus Laire

17

La revista ASPects de ASP tiene una descripción detallada sobre cómo firmar el código (debe ser miembro para leer el artículo). Puede descargarlo a través de http://www.asp-shareware.org/

Aquí hay un enlace a una descripción de cómo puede hacer su propio certificado de prueba .

Esto también puede ser interesante.


77
Anexo cuatro años después: Comodo se vio comprometido en algún momento a principios de 2012 ( blogs.comodo.com/it-security/data-security/… ) y muchos agentes de usuario ahora rechazan los certificados con una autoridad raíz de Comodo
A. Wilson

8
¿Sigue siendo Comodo una apuesta riesgosa a mediados de 2013?
Dan W

Lo sentimos, se eliminaron las recomendaciones explícitas de servicio, que están 1) desactualizadas y 2) ahora se han descartado (porque 1.).
deceze



4

Y otra opción, si está desarrollando en Windows 10 pero no tiene instalado el signtool.exe de Microsoft, puede usar Bash en Ubuntu en Windows para firmar su aplicación. Aquí hay un descuidado:

https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/


osslsigncodetambién está disponible en cygwin, por lo que si ya está usando eso (como yo), puede iniciar sesión en su entorno actual, en lugar de tener que cambiar a WSL.
thoni56

4

Utilice el siguiente enlace para firmar el archivo .exe (instalación / instalador) (firmar el archivo exe / instalación sin usar signtool de instalación de Microsoft)

https://ebourg.github.io/jsign/#files

comando de ejemplo java -jar jsign-2.0.jar --keystore keystore.jks "--alias alias --storepass contraseña MyInstaller.exe

Trabajó para mi :)


3

Esta no es una respuesta directa a la pregunta, pero está estrechamente relacionada (y espero que sea útil) ya que tarde o temprano un programador habrá metido la mano en la billetera:

Entonces, los precios de la firma EV:

1 año $ 350 + (tarifa oculta de $ 50)
2 años $ 600
3 años $ 750
[www.ksoftware.net] [3]
eToken enviado como memoria USB. No se necesita lector.
Realmente compras en Comodo (Sectigo)

1 año 350 euros
3 años 799 euros
sklep.certum.pl

1 año $ 499 USD
3 años $ 897 USD
sectigo.com

1 año $ 410 en total
2 años $ 760 en total
3 años $ 950 en total
www.globalsign.com

1 año: $ 600 (era $ 104)
3 años:?
www.digicert.com

1 año: $ 700
3 años: ridículo caro
[ https://trustcenter.websecurity.symantec.com/]

Más precios aquí:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


También vea el enlace agregado por Erick Castrillo: cheapsslsecurity.com/sslproducts/codesigningcertificate.html

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.