Files
basic-erp/apps/api/certs
GeorgeandClaude Sonnet 5.5 bb4acb5510 feat(api): capa SAP con sesión compartida, mutex de login y cola de peticiones
- SapSessionService: una sesión para todos; un solo login aunque lleguen
  peticiones concurrentes o 401 simultáneos (loginInFlight); logout al apagar.
- SapClientService: proxy con reintento único ante 401, errores SAP
  traducidos (SapHttpException) y fallos de red/TLS mapeados a 502/504.
  Un login rechazado se informa como 502, nunca 401 (el frontend lo toma
  como sesión web expirada).
- Confianza TLS: SAPB1_SL_CA_FILE opcional (autofirmado de SAP o CA de
  firewall) sumado a las CA del sistema; VERIFY_SSL=true por defecto y no
  se puede apagar en producción.
- SAPB1_SL_MAX_CONCURRENCY (default 1): medido en SAP10, más de ~2
  peticiones en paralelo retrasan ~7 s cada una extra; en serie ~60 ms.
- GET /api/health/sap, tests unitarios (MockAgent) y e2e opcional contra
  SAP real (SAP_LIVE=1). apps/api/certs documentado; *.pem/*.cer ignorados.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 18:29:13 -05:00
..

Certificados de confianza (opcional)

Aquí van los certificados PEM que el backend debe aceptar al conectarse al Service Layer. Se referencian con SAPB1_SL_CA_FILE en .env (ruta relativa a apps/api).

Situación Qué cargar
Service Layer con certificado autofirmado de SAP (lo habitual) El propio certificado del servidor (ver abajo)
Red que inspecciona SSL (Fortinet, Zscaler…) La CA de ese firewall
Certificado de una CA pública Nada; dejar SAPB1_SL_CA_FILE vacío

Extraer el certificado autofirmado del Service Layer:

echo | openssl s_client -connect HOST:50000 -servername HOST | openssl x509 -out certs/sap.pem

Verifique la huella (openssl x509 -in certs/sap.pem -noout -fingerprint -sha256) contra el servidor antes de confiar en él. Si el certificado está en DER, conviértalo: openssl x509 -inform der -in cert.cer -out cert.pem.

Los *.pem, *.cer y *.crt no se versionan en la base (son específicos de cada cliente). Cada rama cliente/<nombre> puede quitar esa regla de .gitignore y versionar los suyos.