¿Cómo creo un certificado autofirmado para la firma de código utilizando herramientas del SDK de Windows?
security
code-signing
Roger Lipscombe
fuente
fuente
Respuestas:
Respuesta actualizada
Si está utilizando las siguientes versiones de Windows o posteriores: Windows Server 2012, Windows Server 2012 R2 o Windows 8.1, entonces MakeCert está en desuso , y Microsoft recomienda usar el Cmdlet de PowerShell New-SelfSignedCertificate .
Si está utilizando una versión anterior como Windows 7, deberá seguir con MakeCert u otra solución. Algunas personas sugieren el módulo de infraestructura de clave pública Powershell (PSPKI) .
Respuesta original
Si bien puede crear un certificado de firma de código autofirmado (SPC - Software Publisher Certificate ) de una sola vez, prefiero hacer lo siguiente:
Crear una autoridad de certificación autofirmada (CA)
(^ = permitir la línea de comandos por lotes para ajustar 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 para el usuario actual. Estamos usando el algoritmo SHA-256 . La clave está diseñada para firmar (-sky).
La clave privada debe almacenarse en el archivo MyCA.pvk y el certificado en el archivo MyCA.cer.
Importar el certificado de CA
Debido a que no tiene sentido tener un certificado de CA si no confía en él, deberá importarlo al almacén de certificados de Windows. Usted puede utilizar el complemento MMC certificados, pero a partir de la línea de comandos:
Crear un certificado de firma de código (SPC)
Es más o menos lo mismo que arriba, pero estamos proporcionando 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:
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
( 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 complemento MMC), puede firmar el código de la siguiente manera:
Algunas URL de marca de tiempo posibles
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 de Windows SDK y .NET framework. Un enlace actual está disponible aquí: SDK y .NET (que instala makecert
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 del desarrollador para VS 2015" o "Símbolo del sistema de herramientas nativas VS2015 x64" (probablemente todos en la misma carpeta).
fuente
E=your@email
. Por ejemplo:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
por lo que el certificado puede ser utilizado para la firma de código (sé PowerShell no firma guiones si no se encuentra la misma)Como se indica en la respuesta, para usar una forma no obsoleta de firmar su propio script, uno debe usar New-SelfSignedCertificate .
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 use una forma de filtrado (por huella o emisor).
Obviamente, una vez que haya configurado la clave, simplemente puede firmar cualquier otra secuencia de comandos con ella.
Puede obtener información más detallada y ayuda con la resolución de problemas en este artículo .
fuente
(get-ChildItem ...)
devolución de más de un certificado, así que puse "[0]" al final y funcionó. Al igual que enExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
La respuesta de Roger fue muy útil.
Sin embargo, tuve un pequeño problema para usarlo y seguí recibiendo el cuadro de diálogo de error rojo "Windows no puede verificar el editor del software de este controlador". La clave era instalar el certificado raíz de prueba con
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 (excepto algunas indicaciones de contraseña).
fuente
Es bastante fácil usar el comando New-SelfSignedCertificate en Powershell. Abra powershell y ejecute estos 3 comandos.
Su certificado selfsigncert.pfx se ubicará en @
D:/
Paso opcional: también deberá agregar la contraseña del certificado a las variables de entorno del sistema. hazlo ingresando a continuación en cmd:
setx CSC_KEY_PASSWORD "my_password"
fuente
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 se encuentran en Creación de certificados autofirmados con PowerShell .
fuente