204 líneas
5.8 KiB
Bash
Archivo Ejecutable
204 líneas
5.8 KiB
Bash
Archivo Ejecutable
#!/bin/bash
|
|
|
|
# Script para generar claves de firma para extensiones
|
|
# Classic Add-ons Archive v3.0
|
|
|
|
set -e
|
|
|
|
echo "=================================================="
|
|
echo " Generador de Claves de Firma"
|
|
echo "=================================================="
|
|
echo ""
|
|
|
|
# Colores
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
KEYS_DIR="private-keys"
|
|
CHROME_KEY="$KEYS_DIR/chrome-extension.pem"
|
|
FIREFOX_JWT="$KEYS_DIR/firefox-amo-credentials.json"
|
|
|
|
# Crear directorio de claves si no existe
|
|
if [ ! -d "$KEYS_DIR" ]; then
|
|
mkdir -p "$KEYS_DIR"
|
|
echo -e "${GREEN}✓${NC} Directorio de claves creado: $KEYS_DIR/"
|
|
fi
|
|
|
|
# Generar clave privada para Chrome
|
|
echo ""
|
|
echo "Generando clave privada para Chrome..."
|
|
if [ -f "$CHROME_KEY" ]; then
|
|
echo -e "${YELLOW}⚠${NC} La clave de Chrome ya existe: $CHROME_KEY"
|
|
read -p "¿Deseas regenerarla? (s/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Ss]$ ]]; then
|
|
echo "Manteniendo clave existente"
|
|
else
|
|
openssl genrsa -out "$CHROME_KEY" 2048
|
|
echo -e "${GREEN}✓${NC} Clave de Chrome regenerada"
|
|
fi
|
|
else
|
|
openssl genrsa -out "$CHROME_KEY" 2048
|
|
echo -e "${GREEN}✓${NC} Clave de Chrome generada: $CHROME_KEY"
|
|
fi
|
|
|
|
# Generar ID de extensión de Chrome desde la clave
|
|
if [ -f "$CHROME_KEY" ]; then
|
|
echo ""
|
|
echo "Calculando Extension ID de Chrome..."
|
|
|
|
# Extraer la clave pública en formato DER y calcular ID
|
|
# Alternativa sin xxd: usar od + awk
|
|
openssl rsa -in "$CHROME_KEY" -pubout -outform DER 2>/dev/null | \
|
|
openssl dgst -sha256 -binary | \
|
|
head -c 16 | \
|
|
od -An -tx1 | \
|
|
tr -d ' \n' | \
|
|
tr '0-9a-f' 'a-p' > "$KEYS_DIR/chrome-extension-id.txt"
|
|
|
|
CHROME_ID=$(cat "$KEYS_DIR/chrome-extension-id.txt")
|
|
echo -e "${GREEN}✓${NC} Extension ID: $CHROME_ID"
|
|
echo " (Guardado en: $KEYS_DIR/chrome-extension-id.txt)"
|
|
fi
|
|
|
|
# Generar hash de la clave para verificación
|
|
if [ -f "$CHROME_KEY" ]; then
|
|
KEY_HASH=$(sha256sum "$CHROME_KEY" | cut -d' ' -f1)
|
|
echo "$KEY_HASH" > "$KEYS_DIR/chrome-key-hash.txt"
|
|
echo -e "${GREEN}✓${NC} Hash de verificación guardado"
|
|
fi
|
|
|
|
# Información sobre credenciales de Firefox
|
|
echo ""
|
|
echo "=================================================="
|
|
echo " Credenciales de Firefox (AMO)"
|
|
echo "=================================================="
|
|
echo ""
|
|
echo "Para firmar extensiones de Firefox necesitas credenciales de AMO:"
|
|
echo ""
|
|
echo "1. Ve a: https://addons.mozilla.org/developers/addon/api/key/"
|
|
echo "2. Genera un nuevo par de credenciales (JWT issuer y secret)"
|
|
echo "3. Guarda las credenciales en: $FIREFOX_JWT"
|
|
echo ""
|
|
|
|
if [ ! -f "$FIREFOX_JWT" ]; then
|
|
echo "Plantilla de credenciales de Firefox:"
|
|
cat > "$FIREFOX_JWT" << 'EOF'
|
|
{
|
|
"web-ext": {
|
|
"sign": {
|
|
"apiKey": "user:12345678:123",
|
|
"apiSecret": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
|
|
"channel": "unlisted"
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
echo -e "${YELLOW}⚠${NC} Archivo de plantilla creado: $FIREFOX_JWT"
|
|
echo -e "${YELLOW}⚠${NC} EDITA este archivo con tus credenciales reales de AMO"
|
|
echo ""
|
|
echo "Nota: El ID de la extensión se lee automáticamente de manifest.json"
|
|
else
|
|
echo -e "${GREEN}✓${NC} Archivo de credenciales encontrado: $FIREFOX_JWT"
|
|
fi
|
|
|
|
# Crear archivo .gitignore para el directorio de claves
|
|
cat > "$KEYS_DIR/.gitignore" << 'EOF'
|
|
# Ignorar todas las claves privadas
|
|
*.pem
|
|
*.key
|
|
*.p12
|
|
*.pfx
|
|
*-credentials.json
|
|
*-hash.txt
|
|
|
|
# Permitir README
|
|
!README.md
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓${NC} Archivo .gitignore creado en $KEYS_DIR/"
|
|
|
|
# Crear README en el directorio de claves
|
|
cat > "$KEYS_DIR/README.md" << 'EOF'
|
|
# Claves Privadas de Firma
|
|
|
|
Este directorio contiene las claves privadas para firmar las extensiones.
|
|
|
|
## ⚠️ IMPORTANTE: Seguridad
|
|
|
|
- **NUNCA** subas estas claves a repositorios públicos
|
|
- **NUNCA** compartas estas claves con nadie
|
|
- Haz backup de estas claves en un lugar seguro
|
|
- Si pierdes las claves, perderás el ID de la extensión de Chrome
|
|
|
|
## Archivos
|
|
|
|
### Chrome
|
|
- `chrome-extension.pem` - Clave privada RSA 2048-bit
|
|
- `chrome-extension-id.txt` - ID de la extensión derivado de la clave
|
|
- `chrome-key-hash.txt` - Hash SHA256 para verificación
|
|
|
|
### Firefox
|
|
- `firefox-amo-credentials.json` - Credenciales de API de AMO (addons.mozilla.org)
|
|
|
|
## Uso
|
|
|
|
Las claves se usan automáticamente por los scripts de build:
|
|
```bash
|
|
./build.sh --sign # Firma ambas versiones
|
|
./build.sh --sign-chrome # Solo Chrome
|
|
./build.sh --sign-firefox # Solo Firefox
|
|
```
|
|
|
|
## Regenerar claves
|
|
|
|
```bash
|
|
cd scripts
|
|
./generate-keys.sh
|
|
```
|
|
|
|
**Nota:** Regenerar la clave de Chrome cambiará el ID de la extensión.
|
|
|
|
## Obtener credenciales de Firefox
|
|
|
|
1. Inicia sesión en https://addons.mozilla.org
|
|
2. Ve a: https://addons.mozilla.org/developers/addon/api/key/
|
|
3. Genera credenciales JWT
|
|
4. Copia API Key (issuer) y API Secret
|
|
5. Actualiza `firefox-amo-credentials.json`
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓${NC} README creado en $KEYS_DIR/"
|
|
|
|
# Proteger permisos de archivos sensibles
|
|
chmod 600 "$CHROME_KEY" 2>/dev/null || true
|
|
chmod 600 "$FIREFOX_JWT" 2>/dev/null || true
|
|
chmod 700 "$KEYS_DIR"
|
|
|
|
echo ""
|
|
echo "=================================================="
|
|
echo " ✨ Claves generadas exitosamente"
|
|
echo "=================================================="
|
|
echo ""
|
|
echo "Archivos creados:"
|
|
echo " - $CHROME_KEY (clave privada Chrome)"
|
|
echo " - $KEYS_DIR/chrome-extension-id.txt (ID de extensión)"
|
|
echo " - $KEYS_DIR/chrome-key-hash.txt (hash de verificación)"
|
|
echo " - $FIREFOX_JWT (plantilla de credenciales)"
|
|
echo ""
|
|
echo "Próximos pasos:"
|
|
echo ""
|
|
echo " 1. BACKUP: Guarda $CHROME_KEY en un lugar seguro"
|
|
echo ""
|
|
echo " 2. Configura Firefox AMO:"
|
|
echo " - Edita: $FIREFOX_JWT"
|
|
echo " - Agrega tus credenciales de AMO"
|
|
echo ""
|
|
echo " 3. Firma extensiones:"
|
|
echo " ./build.sh --sign"
|
|
echo ""
|
|
echo "=================================================="
|
|
echo ""
|