12 de junio de 2026
"dh key too small" al conectar con AFIP WSFE desde Node 18+ / OpenSSL 3
Node 18+ usa OpenSSL 3 con SECLEVEL 1 por defecto, que rechaza claves Diffie-Hellman menores a 1024 bits. servicios1.afip.gov.ar usa una clave DH débil → EPROTO write EPROTO tls_process_ske_dhe:dh key too small. Fix: agregar @SECLEVEL=0 al cipher string o bajar minDHSize.
Error verbatim capturado de producción
Error: write EPROTO
library: 'SSL routines',
function: 'tls_process_ske_dhe',
reason: 'dh key too small'
code: 'EPROTO'Sucede al intentar llamar a servicios1.afip.gov.ar/wsfev1/service.asmx (WSFEv1 producción) desde Node 18 o superior.
Por qué ocurre
Node 17+ migró a OpenSSL 3, que eleva el security level por defecto a SECLEVEL 1. A ese nivel, cualquier clave Diffie-Hellman menor a 1024 bits es rechazada durante el handshake TLS. El servidor de AFIP negocia DHE con una clave de tamaño inferior a ese umbral, lo que provoca el EPROTO antes de que el request SOAP llegue al endpoint.
Fix: bajar SECLEVEL globalmente
// Agregar al inicio del proceso, antes de cualquier llamada HTTPS
const tls = require('node:tls');
tls.DEFAULT_CIPHERS = 'DEFAULT@SECLEVEL=0';Esto elimina la restricción de tamaño mínimo de clave DH para todas las conexiones TLS del proceso. Solo para uso interno/fiscal contra AFIP — no aplicar globalmente en un servidor que recibe tráfico externo.
Alternativa: agente HTTPS por conexión
const https = require('node:https');
const tls = require('node:tls');
const afipAgent = new https.Agent({
secureOptions: tls.SSL_OP_LEGACY_SERVER_CONNECT,
ciphers: 'DEFAULT@SECLEVEL=0',
minVersion: 'TLSv1',
});
// Pasar agent: afipAgent al cliente SOAP o a fetch/axiosEste enfoque es más quirúrgico: solo afecta las conexiones que usan ese agente.