Pregunta

¿Cómo creo un certificado autofirmado para firmar código usando herramientas del SDK de Windows?

¿Fue útil?

Solución

Respuesta actualizada

Si está utilizando las siguientes versiones de Windows o posteriores:Windows Server 2012, Windows Server 2012 R2 o Windows 8.1 luego MakeCert ahora está en desuso, y Microsoft recomienda usar el cmdlet de PowerShell Nuevo certificado autofirmado.

Si está utilizando una versión anterior, como Windows 7, deberá seguir con MakeCert u otra solución.Algunas personas sugerir el Módulo Powershell de infraestructura de clave pública (PSPKI).

Respuesta original

Si bien puede crear un certificado de firma de código autofirmado (SPC - Certificado de editor de software) de una vez, prefiero hacer lo siguiente:

Crear una autoridad de certificación (CA) autofirmada

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = permitir que la línea de comando por lotes ajuste la línea)

Esto crea un certificado autofirmado (-r), con una clave privada exportable (-pe).Se llama "Mi CA" y debe colocarse en la tienda de CA del usuario actual.Estamos usando el SHA-256 algoritmo.La clave está destinada a firmar (-sky).

La clave privada debe almacenarse en el archivo MyCA.pvk y el certificado en el archivo MyCA.cer.

Importando el certificado CA

Como no tiene sentido tener un certificado de CA si no confía en él, deberá importarlo al almacén de certificados de Windows.Tú poder use el complemento Certificados MMC, pero desde la línea de comando:

certutil -user -addstore Root MyCA.cer

Crear un certificado de firma de código (SPC)

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

Es prácticamente lo mismo que el anterior, pero proporcionamos una clave de emisor y un certificado (los modificadores -ic y -iv).

También queremos convertir el certificado y la clave en un archivo PFX:

pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx

Si desea proteger el archivo PFX, agregue el modificador -po; de lo contrario, PVK2PFX crea un archivo PFX sin frase de contraseña.

Usando el certificado para firmar el código

signtool sign /v /f MySPC.pfx ^
              /t http://timestamp.url MyExecutable.exe

(Descubra por qué las marcas de tiempo pueden ser importantes)

Si importa el archivo PFX al almacén de certificados (puede usar PVKIMPRT o el complemento MMC), puede firmar el código de la siguiente manera:

signtool sign /v /n "Me" /s SPC ^
              /t http://timestamp.url MyExecutable.exe

Algunas posibles URL de marca de tiempo para signtool /t son:

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.comodoca.com/authenticode

Documentación completa de Microsoft

Descargas

Para aquellos que no son desarrolladores de .NET, necesitarán una copia del SDK de Windows y del marco .NET.Un enlace actual está disponible aquí: SDK y .NET (que instala makecert en C:\Program Files\Microsoft SDKs\Windows\v7.1).Su experiencia puede ser diferente.

MakeCert está disponible desde el símbolo del sistema de Visual Studio.Visual Studio 2015 lo tiene y se puede iniciar desde el menú Inicio en Windows 7 en "Símbolo del sistema para desarrolladores para VS 2015" o "Símbolo del sistema de herramientas nativas VS2015 x64" (probablemente todos en la misma carpeta).

Otros consejos

La respuesta de Roger fue muy útil.

Sin embargo, tuve algunos problemas para usarlo y seguía apareciendo el cuadro de diálogo de error rojo "Windows no puede verificar el editor de este software de controlador".La clave era instalar el certificado raíz de prueba con

certutil -addstore Root Demo_CA.cer

que la respuesta de Roger no cubrió del todo.

Aquí hay un archivo por lotes que funcionó para mí (con mi archivo .inf, no incluido).Muestra cómo hacerlo todo de principio a fin, sin herramientas de GUI en absoluto (excepto algunas indicaciones de contraseña).

REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.

PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\amd64

makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
   -a sha256 -cy authority -sky signature ^
   -sv Demo_CA.pvk Demo_CA.cer

makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
   -sky signature ^
   -ic Demo_CA.cer -iv Demo_CA.pvk ^
   -sv Demo_SPC.pvk Demo_SPC.cer

pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
   -pfx Demo_SPC.pfx ^
   -po x

inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v

signtool sign /d "description" /du "www.yoyodyne.com" ^
   /f Demo_SPC.pfx ^
   /p x ^
   /v driver\demoprinter.cat

certutil -addstore Root Demo_CA.cer

rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

certutil -delstore Root Demo_CA

Como se indica en la respuesta, para utilizar una forma no obsoleta de firmar su propio script, se debe usar Nuevo certificado autofirmado.

  1. Generar la clave:
    New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Exporte el certificado sin la clave privada:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt El [0] hará que esto funcione en los casos en que tenga más de un certificado...Obviamente haga que el índice coincida con el certificado que desea utilizar...o utilizar una forma de filtrar (por huella digital o emisor).

  3. Importarlo como editor de confianza
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Importarlo como autoridad de certificación raíz.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. Firma el guión.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

Obviamente, una vez que haya configurado la clave, simplemente puede firmar cualquier otro script con ella.
Puede obtener información más detallada y ayuda para la resolución de problemas en Este artículo.

A partir de PowerShell 4.0 (Windows 8.1/Servidor 2012 R2) es posible hacer un certificado en Windows sin makecert.exe.

Los comandos que necesitas son Nuevo certificado autofirmado y Exportar-PfxCertificate.

Las instrucciones están en Creación de certificados autofirmados con PowerShell.

Es bastante fácil usar el Nuevo certificado autofirmado comando en Powershell.Abra powershell y ejecute estos 3 comandos.

1) Crear certificado:
$ cert = new -selfsignedCertificate -dnsname www.yourwebsite.com -ype codiseñando -certstorelocation cert: currentUser my my

2) establecer la contraseña para ello:
$ CertPassword = convertTo -Securestring -String "my_passowrd" -force -force

3) Exportarlo:
Export -PfxCertificate -Cert "Cert: CurrentUser my $ ($ cert.thumbprint)" -filepath "d: selfsigncert.pfx" -password $ certpassword

Tu certificado selfsigncert.pfx estará ubicado @ D:/


Paso opcional: También deberá agregar la contraseña del certificado a las variables de entorno del sistema.hágalo ingresando a continuación en cmd: setx CSC_KEY_PASSWORD "my_password"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top