Skip to content

Firma de Codigo y Notarizacion

Esta guia explica como preparar releases de escritorio confiables para Windows y macOS.

Objetivo:

  • Instalador de Windows firmado con un certificado valido.
  • App de macOS firmada y notarizada con Apple Developer ID.
  • Artefactos de release publicados con checksums y trazabilidad del build.

Integracion Actual en CI

La automatizacion de release de KuaDashboard esta en .github/workflows/electron-build.yml y usa:

  • CSC_LINK / CSC_KEY_PASSWORD para firma en Windows.
  • APPLE_TEAM_ID / APPLE_API_KEY / APPLE_API_KEY_ID / APPLE_API_ISSUER para notarizacion en macOS.

La configuracion de Electron esta en package.json, y la notarizacion se ejecuta en electron/notarize.js.

Windows: Generar y Exportar Certificado

Usa un certificado de firma de codigo emitido por una CA (OV o EV).

Importante:

  • EV normalmente acelera la reputacion de SmartScreen.
  • OV funciona correctamente, pero SmartScreen puede tardar mas en confiar.

1. Recibir certificado de la CA

Sigue el proceso de tu CA (DigiCert, Sectigo, GlobalSign, etc.) e instala el certificado en el almacén de certificados de Windows o importa el archivo .pfx entregado.

2. Exportar PFX (si aplica)

Si tu certificado esta instalado en Windows Certificate Store:

  1. Abre certmgr.msc.
  2. Ve a Personal -> Certificates.
  3. Busca tu certificado de code signing.
  4. Click derecho -> All Tasks -> Export.
  5. Elige Yes, export the private key.
  6. Elige Personal Information Exchange - PKCS #12 (.PFX).
  7. Define una contraseña robusta.
  8. Guarda el archivo, por ejemplo: kuadashboard-codesign.pfx.

3. Convertir PFX a base64 para GitHub Secret

PowerShell:

powershell
[Convert]::ToBase64String([IO.File]::ReadAllBytes(".\kuadashboard-codesign.pfx")) | Set-Content -NoNewline .\codesign-pfx-base64.txt

Usa el contenido de codesign-pfx-base64.txt como valor de CSC_LINK.

Define CSC_KEY_PASSWORD con la contraseña del PFX.

macOS: Preparar Firma y Notarizacion

Requisitos:

  • Membresia activa en Apple Developer Program.
  • Certificado Developer ID Application.
  • API key de App Store Connect para notarizacion.

Estos pasos se hacen desde tu Mac.

1. Crear o importar certificado Developer ID

En Keychain Access:

  1. Importa tu certificado Developer ID Application.
  2. Verifica que la clave privada aparezca bajo el certificado.

2. Exportar certificado como P12

  1. Abre Keychain Access.
  2. Selecciona el certificado Developer ID Application y su clave privada.
  3. Click derecho -> Export 2 items....
  4. Guarda como .p12 y define una contraseña de exportacion.

3. Convertir P12 a base64 para CI

En terminal macOS:

bash
base64 -i kuadashboard-developer-id.p12 | tr -d '\n' > apple-cert-base64.txt

Puedes usar este valor como CSC_LINK en GitHub Secrets si tu workflow firma macOS con la misma variable.

Nota:

  • Si Windows y macOS usan materiales distintos de certificado, separa secretos por plataforma o por environment/workflow.

4. Crear API key de App Store Connect

En App Store Connect:

  1. Users and Access -> Keys.
  2. Crea una API key nueva.
  3. Descarga el archivo .p8 (solo una vez).
  4. Guarda:
    • Key ID
    • Issuer ID
    • Team ID (de tu cuenta Apple).

5. Preparar GitHub secrets para notarizacion

Define:

  • APPLE_API_KEY = contenido completo del .p8 (texto crudo incluyendo BEGIN/END).
  • APPLE_API_KEY_ID = key ID.
  • APPLE_API_ISSUER = issuer ID.
  • APPLE_TEAM_ID = Apple Team ID.

Configuracion de Secrets en GitHub

En GitHub -> Settings -> Secrets and variables -> Actions, agrega:

  • CSC_LINK
  • CSC_KEY_PASSWORD
  • APPLE_TEAM_ID
  • APPLE_API_KEY
  • APPLE_API_KEY_ID
  • APPLE_API_ISSUER

Recomendado:

  • Usar secrets por environment (por ejemplo production) con aprobacion requerida.
  • Ejecutar releases solo desde tags protegidos.

Checklist de Validacion de Release

Antes de crear tag:

  1. Verificar certificados vigentes (sin expiracion).
  2. Verificar que todos los secrets requeridos existen.
  3. Probar un release con tag temporal.
  4. Verificar firmas:
    • Windows: validar firmante en propiedades del .exe.
    • macOS: ejecutar codesign --verify --deep --strict --verbose=2 /Applications/KuaDashboard.app.
    • macOS: ejecutar spctl -a -vv /Applications/KuaDashboard.app.
  5. Confirmar que SHA256SUMS.txt esta adjunto al release.
  6. Confirmar que la atestacion del build esta disponible.

Troubleshooting

SmartScreen sigue mostrando advertencia en Windows

Posibles causas:

  • El certificado es valido, pero la reputacion de SmartScreen aun esta calentando.
  • Cambio de nombre de producto o publisher entre versiones.
  • El binario fue modificado despues de firmar.

La app de macOS no abre despues de instalar

Posibles causas:

  • La notarizacion no corrio por falta de secretos Apple.
  • Certificado o API key de otro Team.
  • El artefacto fue modificado/re-empaquetado luego de firma/notarizacion.

GitHub Action marca secret context invalid

El editor puede advertir esto cuando no encuentra metadata local de secretos. No bloquea la ejecucion real si los secrets existen en el repositorio.

Released under the MIT License.