SUNAT actualizó su DataPower Gateway (IBM), el cual dejó de procesar correctamente los headers WS-Security que utilizan PasswordDigest.
PasswordText (texto plano) operan con normalidad.En WCF, la configuración TransportWithMessageCredential utiliza PasswordDigest de forma predeterminada. Cambiar este comportamiento en el binding estándar es complejo y requiere extensiones personalizadas de seguridad.
Antes de modificar el código, valide la conectividad con este envelope SOAP usando PasswordText:
https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ...>
<soapenv:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>USUARIOSOL</wsse:Username>
<wsse:Password>CLAVESOL</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<!-- Body de la petición -->
</soapenv:Envelope>
La solución consiste en bypassar el proxy WCF y utilizar HttpClient para construir manualmente el envelope SOAP con PasswordText.
// Helper para construcción de Envelope
private string BuildSoapEnvelope(string usuario, string clave, string bodyContent)
{
return $"<soapenv:Envelope ...><wsse:Password>{clave}</wsse:Password>...";
}
// Ejecución vía HttpClient
private XDocument EjecutarSoap(string endpointUrl, string soapEnvelope, string soapAction)
{
using (var client = new HttpClient()) {
request.Headers.Add("SOAPAction", "\"{soapAction}\"");
// Lógica de envío y manejo de respuesta...
}
}
Aunque PasswordText envía la clave en claro dentro del XML, el canal HTTPS/TLS 1.2 garantiza que la información viaje cifrada de extremo a extremo, manteniendo un nivel de seguridad adecuado.
| Ambiente | Endpoint URL |
|---|---|
| Producción | https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService |
| Beta / Homologación | https://e-beta.sunat.gob.pe:443/ol-ti-itcpfegem/billService |