Saltar al contenido

Firma de código en Windows

La firma de código es obligatoria en Windows para permitir que tu aplicación aparezca listada en la Microsoft Store y para evitar una advertencia de SmartScreen de que tu aplicación no es de confianza y no se puede iniciar cuando se descarga desde el navegador.

No se requiere para ejecutar tu aplicación en Windows, siempre que tu usuario final esté de acuerdo con ignorar la advertencia de SmartScreen o tu usuario no realice la descarga a través del navegador. Esta guía cubre la firma a través de certificados OV (Validación de Organización) y Azure Key Vault. Si utilizas cualquier otro mecanismo de firma no documentado aquí, como certificados EV (Validación Extendida), consulta la documentación del emisor de tu certificado y dirígete a la sección del comando de firma personalizado.

  • Windows: probablemente puedas usar otras plataformas, pero este tutorial utiliza características nativas de PowerShell.
  • Una aplicación Tauri funcional
  • Code signing certificate - you can acquire one of these on services listed in Documentación de Microsoft. There are likely additional authorities for non-EV certificates than included in that list, please compare them yourself and choose one at your own risk.
    • ¡Por favor, asegúrate de obtener un certificado de firma de código, los certificados SSL no funcionan!

Hay algunas cosas que debemos hacer para preparar Windows para la firma de código. Esto incluye convertir nuestro certificado a un formato específico, instalar este certificado y decodificar la información requerida del certificado.

    • Necesitarás lo siguiente:

      • archivo de certificado (el mío es cert.cer)
      • archivo de clave privada (el mío es private-key.key)
    • Abre un símbolo del sistema y cámbiate a tu directorio actual usando cd Documents/Certs

    • Convierte tu .cer a un .pfx usando openssl pkcs12 -export -in cert.cer -inkey private-key.key -out certificate.pfx

    • Se te solicitará ingresar una contraseña de exportación ¡NO LA OLVIDES!

  1. Importa tu archivo .pfx en el almacén de claves (keystore).

    Sección titulada “Importa tu archivo .pfx en el almacén de claves (keystore).”
    • Ahora necesitamos importar nuestro archivo .pfx.

    • Asigna tu contraseña de exportación a una variable usando $WINDOWS_PFX_PASSWORD = 'MYPASSWORD'

    • Ahora importa el certificado usando Import-PfxCertificate -FilePath certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $WINDOWS_PFX_PASSWORD -Force -AsPlainText)

    • Inicio ➡️ certmgr.msc para abrir la gestión de certificados personales, luego abre Personal/Certificados.

    • Busca el certificado que acabamos de importar y haz doble clic en él, luego haz clic en la pestaña Detalles.

    • El algoritmo de hash de firma será nuestro digestAlgorithm. (Pista: es probable que sea sha256)

    • Desplázate hacia abajo hasta Huella digital (Thumbprint). Debería haber un valor como A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0. Esta es nuestra certificateThumbprint.

    • También necesitamos una URL de marca de tiempo (timestamp URL); se trata de un servidor de hora utilizado para verificar la hora de la firma del certificado. Estoy usando http://timestamp.comodoca.com, pero de quien hayas obtenido tu certificado probablemente también tenga uno.

  1. Ahora que tenemos nuestra certificateThumbprint, digestAlgorithm y timestampUrl, abriremos el tauri.conf.json.

  2. En el tauri.conf.json buscarás la sección tauri -> bundle -> windows. Hay tres variables para la información que hemos capturado. Complétala como se muestra a continuación.

"windows": {
"certificateThumbprint": "A1B1A2B2A3B3A4B4A5B5A6B6A7B7A8B8A9B9A0B0",
"digestAlgorithm": "sha256",
"timestampUrl": "http://timestamp.comodoca.com"
}
  1. Guarda y ejecuta tauri build

  2. En la salida de la consola, deberías ver la siguiente salida.

info: signing app
info: running signtool "C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe"
info: "Done Adding Additional Store\r\nSuccessfully signed: APPLICATION FILE PATH HERE

Lo cual muestra que has firmado con éxito el .exe.

¡Y eso es todo! Has configurado con éxito tu aplicación Tauri para la firma en Windows.

También podemos crear un flujo de trabajo para firmar la aplicación con GitHub Actions.

Necesitamos agregar algunos secretos de GitHub para la configuración adecuada de la GitHub Action. A estos se les puede dar el nombre que desees.

Los secretos que usamos son los siguientes

Secretos de GitHub Valor para la Variable
WINDOWS_CERTIFICATE Versión codificada en Base64 de tu certificado .pfx, se puede hacer con este comando certutil -encode certificate.pfx base64cert.txt
WINDOWS_CERTIFICATE_PASSWORD Contraseña de exportación del certificado utilizada al crear el certificado .pfx
  1. Necesitamos agregar un paso en el flujo de trabajo para importar el certificado en el entorno de Windows. Este flujo de trabajo logra lo siguiente

    1. Asignar secretos de GitHub a variables de entorno
    2. Crea un nuevo directorio certificate
    3. Importa WINDOWS_CERTIFICATE en tempCert.txt
    4. Usa certutil para decodificar el tempCert.txt de base64 a un archivo .pfx.
    5. Eliminar tempCert.txt
    6. Importa el archivo .pfx en el almacén de Certificados de Windows y convierte la WINDOWS_CERTIFICATE_PASSWORD a una cadena segura para usarla en el comando de importación.
  2. Utilizaremos la plantilla de publicación de plantilla de tauri-action.

name: 'publish'
on:
push:
branches:
- release
jobs:
publish-tauri:
strategy:
fail-fast: false
matrix:
platform: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v2
- name: setup node
uses: actions/setup-node@v1
with:
node-version: 12
- name: install Rust stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: install webkit2gtk (ubuntu only)
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y webkit2gtk-4.0
- name: install app dependencies and build it
run: yarn && yarn build
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
  1. Justo encima de -name: install app dependencies and build it querrás agregar el siguiente paso
- name: import windows certificate
if: matrix.platform == 'windows-latest'
env:
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
run: |
New-Item -ItemType directory -Path certificate
Set-Content -Path certificate/tempCert.txt -Value $env:WINDOWS_CERTIFICATE
certutil -decode certificate/tempCert.txt certificate/certificate.pfx
Remove-Item -path certificate -include tempCert.txt
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
  1. Guarda y haz push a tu repositorio.

  2. ¡Tu flujo de trabajo ahora puede importar tu certificado de Windows e importarlo en el runner de GitHub, permitiendo la firma de código automatizada!

Puedes firmar los ejecutables de Windows proporcionando un certificado y credenciales de Azure Key Vault.

  1. Key Vault

En el Portal de Azure navega hasta el servicio Key vaults para crear un nuevo key vault haciendo clic en el botón “Crear”. Recuerda el “Nombre del key vault”, ya que necesitarás esa información para configurar la URL del certificado.

  1. Certificado

Después de crear un key vault, selecciónalo y ve a la página “Objetos > Certificados” para crear un nuevo certificado y haz clic en el botón “Generar/Importar”. Recuerda el “Nombre del certificado”, ya que necesitarás esa información para configurar la URL del certificado.

  1. Configuración de Tauri

relic utiliza un archivo de configuración para determinar qué clave de firma debe usar. Para Azure Key Vault también necesitas la URL del certificado. Crea un archivo relic.conf en la carpeta src-tauri y configura relic para que use tu certificado:

src-tauri/relic.conf
tokens:
azure:
type: azure
keys:
azure:
token: azure
id: https://\<KEY_VAULT_NAME\>.vault.azure.net/certificates/\<CERTIFICATE_NAME\>

Ten en cuenta que debes reemplazar <KEY_VAULT_NAME> y <CERTIFICATE_NAME> con los nombres apropiados de los pasos anteriores.

Para configurar Tauri para que use tu configuración de Azure Key Vault para la firma, cambia el valor de configuración bundle > windows > signCommand:

tauri.conf.json
{
"bundle": {
"windows": {
"signCommand": "relic sign --file %1 --key azure --config relic.conf"
}
}
}
  1. Credenciales

relic debe autenticarse con Azure para poder cargar el certificado. En la página de inicio del portal de Azure, ve al servicio “Microsoft Entra ID” y dirígete a la página “Administrar > Registros de aplicaciones”. Haz clic en “Nuevo registro” para crear una nueva aplicación. Después de crear la aplicación, serás redirigido a la página de detalles de la aplicación donde podrás ver los valores de “ID de la aplicación (cliente)” e “ID del directorio (inquilino)”. Establece estos ID en las variables de entorno AZURE_CLIENT_ID y AZURE_TENANT_ID respectivamente.

En la página “Administrar > Certificados y secretos”, haz clic en el botón “Nuevo secreto de cliente” y establece el texto de la columna “Valor” como la variable de entorno AZURE_CLIENT_SECRET.

Después de configurar todas las credenciales, regresa a la página de tu key vault y navega a la página “Control de acceso (IAM)”. Debes asignar los roles “Usuario de certificado de Key Vault” y “Usuario de criptografía de Key Vault” a tu aplicación recién creada.

¡Después de configurar todas estas variables, ejecutar tauri build producirá instaladores de Windows firmados!

En la documentación de Azure Key Vault anterior, utilizamos una potente configuración de firma de Windows en Tauri para forzar a la CLI de Tauri a usar un comando de shell especial para firmar ejecutables de instaladores de Windows. La opción de configuración bundle > windows > signCommand se puede utilizar con cualquier herramienta de firma de código que pueda firmar ejecutables de Windows.

Puedes firmar los ejecutables de Windows proporcionando un certificado y credenciales de Azure Artifact Signing (anteriormente llamado Azure Code Signing/Azure Trusted Signing). Si aún no tienes una cuenta de Azure Artifact Signing, puedes seguir este tutorial.

Si quieres firmar con GitHub Actions, todo debería estar instalado.

  1. Cuenta de Artifact Signing y permisos configurados
  2. .NET (se recomienda .NET 8)
  3. Azure CLI
  4. Signtool (se recomienda SDK de Windows 11 10.0.26100.0 o posterior)

Necesitas instalar artifact-signing-cli y configurar tus variables de entorno.

    • cargo install artifact-signing-cli
    • artifact-signing-cli needs the following environment variables to be set, don’t forget to add these as Github Actions secretos:
    • You can modify your tauri.conf.json or you can create a specific config file for Windows. Replace the URL and the certificate name with your own values.
      • -e: El endpoint de tu cuenta de Azure Artifact Signing
      • -a: El nombre de tu cuenta de Azure Artifact Signing
      • -c: El nombre del perfil de certificado dentro de tu cuenta de Azure Artifact Signing
      • -d: La descripción del contenido firmado (opcional). Al firmar un instalador .msi, esta descripción aparecerá como el nombre del instalador en la solicitud de UAC o será una cadena aleatoria de caracteres si no se establece.
    tauri.conf.json
    {
    "bundle": {
    "windows": {
    "signCommand": "artifact-signing-cli -e https://wus2.codesigning.azure.net -a MyAccount -c MyProfile -d MyApp %1"
    }
    }
    }

© 2026 Colaboradores de Tauri. CC-BY / MIT