Saltar al contenido

¿Cómo creo un certificado autofirmado para la firma de código en Windows?

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, 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 sugieren 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 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 línea de comando 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á 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 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 pueden use el complemento Certificados MMC, pero desde la línea de comando:

certutil -user -addstore Root MyCA.cer

Creación de 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 proporcionamos una clave de emisor y un certificado (los conmutadores -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

(Vea 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 están:

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

Documentación completa de Microsoft

  • signtool
  • hacer concierto
  • pvk2pfx

Descargas

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

MakeCert está disponible en el símbolo del sistema de Visual Studio. Visual Studio 2015 sí 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).

Como se indica en la respuesta, para usar una forma no obsoleta de firmar su propio script, se debe usar New-SelfSignedCertificate.

  1. Genera la clave:
New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:CurrentUserMy
  1. Exporte el certificado sin la clave privada:
Export-Certificate -Cert (Get-ChildItem Cert:CurrentUserMy -CodeSigningCert)[0] -FilePath code_signing.crt

los [0] hará que esto funcione para los casos en los 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 thumprint o emisor).

  1. Importarlo como editor de confianza
Import-Certificate -FilePath .code_signing.crt -Cert Cert:CurrentUserTrustedPublisher
  1. Importarlo como una autoridad de certificación raíz.
Import-Certificate -FilePath .code_signing.crt -Cert Cert:CurrentUserRoot
  1. Firme el script (asumiendo que aquí se llama script.ps1, corrija la ruta en consecuencia).
Set-AuthenticodeSignature .script.ps1 -Certificate (Get-ChildItem Cert:CurrentUserMy -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.

Es bastante fácil usar el comando New-SelfSignedCertificate en Powershell. Abra powershell y ejecute estos 3 comandos.

1) Crear certificado:
$ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert: CurrentUser My

2) establecer la contraseña para ello:
$ CertPassword = ConvertTo-SecureString -String “my_passowrd” -Force –AsPlainText

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 necesitaría 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"

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *