Saltar al contenido
VeloraBlog
← Todos los artículos

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/axios

Este enfoque es más quirúrgico: solo afecta las conexiones que usan ese agente.