El error ns1:cms.sign.invalid ("Firma inválida o algoritmo no soportado") suele indicar un problema con el certificado digital utilizado para firmar la solicitud. Puede deberse a que el certificado está corrupto, mal generado, vencido, o fue emitido con algún problema desde AFIP/ARCA. También puede ocurrir si se mezclan certificados de testing y producción, o si el algoritmo de firma no es compatible con el entorno configurado. Se recomienda regenerar el certificado y la key usando el SDK, asegurándose de seguir los pasos oficiales y de que el archivo comience con -----BEGIN CERTIFICATE----- y sea válido para el entorno correspondiente (dev/prod) según la configuración del sistema.
Si el problema persiste tras regenerar el certificado, verifica que el alias y la autorización del web service estén correctamente configurados y que no haya un desajuste entre el entorno y el tipo de certificado. Este error ha sido reportado y resuelto por otros usuarios siguiendo estos pasos, y es una de las causas más frecuentes de fallos recientes en la facturación electrónica con Afip SDK. Más detalles y soluciones en este enlace y documentación oficial.
¿Te gustaría una guía paso a paso para regenerar el certificado y autorizar el web service?
Sources:
Si, dame una guía paso a paso
Hace la guía paso a paso
Claro, aquí tienes una guía paso a paso para resolver el error de firma inválida (ns1:cms.sign.invalid) al facturar con Afip SDK:
1. Regenera el certificado y la key
- Usa el SDK para evitar errores manuales. Si usas Python, instala la librería:
pip install afip.py
- Crea el certificado con el siguiente código (ajusta los datos a tu caso):
from afip import Afip
afip = Afip({"access_token": "TU_ACCESS_TOKEN"})
data = {
"cuit": "XXXXX",
"username": "USUARIO_ARCA",
"password": "CLAVE_FISCAL",
"alias": "NOMBRE_CERTIFICADO"
}
response = afip.createAutomation("create-cert-prod", data, True)
print(response["cert"])
print(response["key"])
Guarda ambos archivos (.crt y .key) en un lugar seguro. Más detalles en esta guía.
2. Autoriza el certificado para el web service
- Ingresa a ARCA y autoriza el certificado para el web service que vas a usar (por ejemplo, wsfe para facturación electrónica). Puedes hacerlo manualmente o con el SDK usando la automatización correspondiente. Detalles en esta guía.
3. Verifica el entorno
- Asegúrate de que el certificado y la key correspondan al entorno (producción o desarrollo) que estás usando en tu sistema.
4. Reemplaza los archivos
- Sustituye los archivos .crt y .key antiguos por los nuevos en tu servidor o sistema.
5. Prueba la facturación
- Intenta emitir una factura nuevamente. Si el error persiste, revisa que el archivo .crt comience con
-----BEGIN CERTIFICATE-----y que no estés mezclando certificados de testing y producción.
¿Necesitás ayuda con algún paso específico?
Sources:
El tema es que, sin darnos cuenta, nosotros en cada momento que vamos a facturar (1 vez por día), generamos estos archivos .crt y .key pero no los guardamos en un archivo. Directamente en nuestro flujo, guardamos en una variable cada archivo y luego ejecutamos lo demás que falta para terminar de facturar.
Ese es el problema: cada vez que generás un nuevo certificado y key, invalidás el anterior y la firma deja de ser válida para ARCA. Debés generar el certificado y la key una sola vez, guardarlos en archivos seguros (.crt y .key), y reutilizarlos en cada facturación diaria, en vez de crearlos cada vez. Así evitarás el error de firma inválida y cumplirás con el flujo correcto de ARCA y Afip SDK.
La documentación y la comunidad recomiendan explícitamente guardar y reutilizar los archivos, no generarlos en cada operación. Más detalles en esta guía.
Sources:
Tenés algún llamado de API para obtener el vencimiento del crt?
La documentación de Afip SDK que he consultado no menciona ningún método o endpoint de la API que permita consultar directamente la fecha de vencimiento de un certificado (.crt). Si necesitas saber la validez de tu certificado, podrías agregar el archivo .crt a tu sistema operativo y consultarlo desde allí, o abrirlo con un editor de texto para ver la información de validez, pero no hay un endpoint específico en la API de Afip SDK para obtener esa información automáticamente. Si puedes aclarar si buscas hacerlo desde código o desde la interfaz de AFIP, podría orientarte mejor. Si esto no resuelve tu consulta, por favor contacta al equipo de soporte de Afip SDK para más ayuda.