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_PASSWORDpara firma en Windows.APPLE_TEAM_ID/APPLE_API_KEY/APPLE_API_KEY_ID/APPLE_API_ISSUERpara 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:
- Abre
certmgr.msc. - Ve a
Personal->Certificates. - Busca tu certificado de code signing.
- Click derecho ->
All Tasks->Export. - Elige
Yes, export the private key. - Elige
Personal Information Exchange - PKCS #12 (.PFX). - Define una contraseña robusta.
- Guarda el archivo, por ejemplo:
kuadashboard-codesign.pfx.
3. Convertir PFX a base64 para GitHub Secret
PowerShell:
[Convert]::ToBase64String([IO.File]::ReadAllBytes(".\kuadashboard-codesign.pfx")) | Set-Content -NoNewline .\codesign-pfx-base64.txtUsa 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:
- Importa tu certificado
Developer ID Application. - Verifica que la clave privada aparezca bajo el certificado.
2. Exportar certificado como P12
- Abre Keychain Access.
- Selecciona el certificado
Developer ID Applicationy su clave privada. - Click derecho ->
Export 2 items.... - Guarda como
.p12y define una contraseña de exportacion.
3. Convertir P12 a base64 para CI
En terminal macOS:
base64 -i kuadashboard-developer-id.p12 | tr -d '\n' > apple-cert-base64.txtPuedes 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:
- Users and Access -> Keys.
- Crea una API key nueva.
- Descarga el archivo
.p8(solo una vez). - 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_LINKCSC_KEY_PASSWORDAPPLE_TEAM_IDAPPLE_API_KEYAPPLE_API_KEY_IDAPPLE_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:
- Verificar certificados vigentes (sin expiracion).
- Verificar que todos los secrets requeridos existen.
- Probar un release con tag temporal.
- 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.
- Windows: validar firmante en propiedades del
- Confirmar que
SHA256SUMS.txtesta adjunto al release. - 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.
