¿Cómo puedo crear un certificado autofirmado para la firma de código en Windows?
¿Cómo puedo crear un certificado autofirmado para la firma de código con herramientas del SDK de Windows?
5 answers
Respuesta actualizada
Si está utilizando las siguientes versiones de Windows o posteriores: Windows Server 2012, Windows Server 2012 R2 o Windows 8.1, MakeCert está ahora en desuso y Microsoft recomienda usar el Cmdlet de PowerShell New-SelfSignedCertificate.
Si está utilizando una versión anterior como Windows 7, tendrá que seguir con MakeCert u otra solución. Algunas personas sugieren la Infraestructura de Clave Pública Módulo Powershell (PSPKI) .
Respuesta original
Si bien puede crear un certificado de firma de código autofirmado (SPC - Certificado de Editor de Software ) de una sola vez, prefiero hacer lo siguiente:
Creación de 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 comandos por lotes se ajuste a la línea)
Esto crea un certificado autofirmado (- r), con una clave privada exportable (- pe). Se llama "Mi CA", y se debe poner en el CA almacenar para el usuario actual. Estamos usando el algoritmo SHA-256. La clave es para firmar (- sky).
La clave privada debe almacenarse en MyCA.archivo pvk, y el certificado en el MyCA.archivo cer.
Importando el certificado de CA
Dado que no tiene sentido tener un certificado de CA si no confía en él, deberá importarlo al almacén de certificados de Windows. puede usar el snapin de certificados MMC, pero desde el comando línea:
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 más o menos lo mismo que el anterior, pero estamos proporcionando una clave de emisor y un certificado (los switches-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 interruptor-po, de lo contrario PVK2PFX crea un archivo PFX sin frase de contraseña.
Uso del certificado para la firma código
signtool sign /v /f MySPC.pfx ^
/t http://timestamp.url MyExecutable.exe
(Vea por qué las marcas de tiempo pueden importar )
Si importa el archivo PFX en el almacén de certificados (puede usar PVKIMPRT o el snapin 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 URLs 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
Microsoft completo documentación
Descargas
Para aquellos que no son desarrolladores de.NET, necesitará una copia del SDK de Windows y. NET framework. Un enlace actual está disponible aquí: SDK&. NET (que instala makecert en C:\Program Files\Microsoft SDKs\Windows\v7.1
). Su kilometraje puede variar.
MakeCert está disponible desde el símbolo del sistema de Visual Studio. Visual Studio 2015 lo tiene, y puede ser iniciado desde el menú Inicio en Windows 7 bajo "Desarrollador Símbolo del sistema para VS 2015" o "VS2015 x64 Native Tools Símbolo del sistema" (probablemente todos ellos en la misma carpeta).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-09 18:33:57
La respuesta de Roger fue muy útil.
Tuve un pequeño problema para usarlo, sin embargo, y siguió recibiendo el rojo "Windows no puede verificar el editor de este software de controlador" diálogo de error. 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 GUI en absoluto (excepto por algunas contraseñas pedir).
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-18 08:39:12
A partir de PowerShell 4.0 (Windows 8.1/ Server 2012 R2) es posible hacer un certificado en Windows sin makecert.exe.
Los comandos que necesita son New-SelfSignedCertificate y Export-PfxCertificate.
Las instrucciones están en Creación de certificados autofirmados con PowerShell.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-18 08:40:59
Es bastante fácil usar el comando New-SelfSignedCertificate en Powershell. Abra powershell y ejecute estos 3 comandos.
1) Crear certificado :
$cert = New-AuthSignedCertificate -DNSName www.yourwebsite.com - Type CodeSigning-CertStoreLocation Cert:\CurrentUser \ My2) establezca la contraseña :
$CertPassword = ConvertTo-SecureString - String" my_passowrd " - Force –AsPlainText3) Exportación it :
Export-PfxCertificate-Cert " cert:\CurrentUser\My \ My (cer cert.Huella digital)" - Ruta de archivo "d:\selfsigncert.pfx " - Password {CertPassword
Su certificado selfsigncert.pfx se ubicará @ D:/
Paso opcional: También necesitará agregar la contraseña del certificado a las variables de entorno del sistema. para ello, introduzca a continuación en cmd: setx CSC_KEY_PASSWORD "my_password"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-23 13:20:54
Como se indica en la respuesta, para usar una forma no obsoleta de firmar su propio script, uno debe usar New-SelfSignedCertificate.
Generar la clave:
New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
Exportar 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 para los casos en que tenga más de un certificado... Obviamente, haga que el índice coincida con el certificado que desea usar... o utilice una manera de filtrar (por thumprint o emisor).Importar como Editor de Confianza
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
Impórtelo como una autoridad de certificado raíz.
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
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 solucionar problemas en este artículo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-08 05:55:48