1.9 KiB
1.9 KiB
Seguridad y Certificados
Certificados Digitales
Requisitos
- Certificado cualificado de firma electrónica (eIDAS)
- Formato .p12 o .pfx
- Contraseña válida
Validación
La API valida nativamente (sin scripts externos):
- Formato PKCS#12 válido
- Contraseña correcta
- Fechas de validez (no expirado, no futuro)
- Días hasta expiración
Almacenamiento
El certificado se envía como base64 en el JSON de registro:
{
"cert_name": "mi-cert",
"cert_file": "BASE64_P12_CONTENT",
"password_encrypted": "..."
}
- El cliente envía el certificado como base64
- Se valida el PKCS#12 nativamente en Go
- Se guarda en
data/certs/<cert_name>.p12 - Se genera un token de sesión
Cifrado RSA
Porqué RSA
- Las contraseñas de certificados no se envían en texto plano
- El cliente cifra la contraseña con la clave pública de la API
- Solo la API puede descifrarla (tiene la clave privada)
Proceso
1. API genera par de claves RSA al inicio
2. Cliente pide /api/v1/auth/public-key
3. Cliente cifra password con clave pública
4. Cliente envía cifrada
5. API descifra con clave privada
Generación de Claves
Las claves RSA se generan automáticamente en ./keys/:
private.pem: Clave privada (nunca expuesta)public.pem: Clave pública
HTTPS
Importante: En producción, la API debe usar HTTPS.
# config.yml
server:
port: 443
cert: ./ssl/server.crt
key: ./ssl/server.key
Variables de Entorno
VERIFACTU_ENV=test # test o production
VERIFACTU_CERT_PATH=... # path al certificado
Rate Limiting
No implementado actualmente, pero recomendado para producción.
Logs
Los logs contienen:
- Requests recibidos
- Errores de validación
- Respuestas de AEAT (sin información sensible)
No contienen:
- Contraseñas
- Tokens
- Contenido de certificados