Skip to main content

Reference Network Architecture

PropertyValue
ControlsSID-TRANS-01, SID-TRANS-04, SID-HARD-03
ISO 27001A.8.20 (Network security), A.8.21 (Security of network services), A.8.22 (Segregation of networks), A.8.23 (Web filtering)

Purpose

This document provides a reference network architecture for SIROS ID deployments, describing port separation, TLS boundaries, network segmentation, and the boundary between platform-provided controls and operator-required infrastructure. It addresses the finding that platform-level network controls (port separation, SSRF protection, TLS) exist but a consolidated reference architecture was not documented.

Deployment Overview

Port Separation

go-wallet-backend

PortServiceBindAuthenticationNetwork Zone
8080HTTP API (user-facing)0.0.0.0JWT (WebAuthn-issued)Public (via reverse proxy)
8081Admin APIConfigurableBearer token (pre-shared)Management only (must be network-restricted)
8082WebSocket engine0.0.0.0JWT in first WS messagePublic (via reverse proxy)
8097VCTM Registry0.0.0.0Varies by routeInternal

Each port runs as a separate http.Server instance with independent routing, enabling distinct network policies per port.

Split-mode deployment: The backend supports distributed deployment where HTTP, WebSocket, and Registry run on separate hosts:

  • backend_url — HTTP API endpoint
  • engine_url — WebSocket endpoint (e.g. wss://ws.wallet.example.com)
  • registry_url — VCTM registry endpoint
  • admin_url — Admin API endpoint

facetec-api

PortServiceAuthenticationNetwork Zone
8080All endpointsJWT or AppKeyPublic (via reverse proxy)
/livez, /readyz, /healthzNoneManagement (probes)
/metricsNoneManagement (Prometheus)

Single port; endpoint-level differentiation for health and metrics.

vc Platform

Each vc service runs independently with its own port:

ServiceHTTP PortgRPC PortNetwork Zone
API Gateway8080Public (credential flows)
Issuer8080— (gRPC client)Internal
Verifier8080Public (via reverse proxy)
Registry80808090Internal

Inter-service communication: gRPC with optional mTLS (cert fingerprint and DN pinning).

TLS Boundaries

BoundaryProtocolTLSAuthentication
Internet → Reverse ProxyHTTPSTLS 1.2+ (operator config)N/A
Reverse Proxy → ApplicationHTTP or TLSOptional (operator config)N/A
Application → MongoDBTCPOptional mTLSClient cert
go-trust → External registriesHTTPSTLS 1.2+ (hardened ciphers)SSRF-protected
facetec-api → FaceTec ServerHTTPSmTLS (optional)Client cert
facetec-api → vc apigwHTTPSmTLS + TLS 1.2Client cert + Bearer
vc issuer ↔ registrygRPCmTLS (optional)Cert fingerprint + DN

SSRF Protection

Two components implement SSRF protection for outbound HTTP:

go-trust SafeHTTPClient

Applied to all trust resolution HTTP calls (ETSI TSL, DID, OpenID Federation):

  • Blocks RFC 1918 private ranges, loopback, link-local
  • Blocks cloud metadata endpoints (169.254.169.254)
  • DNS rebinding protection (validates resolved IPs before connecting)
  • HTTPS-only by default
  • Host allowlisting (optional)
  • Redirect target validation

vc Config Validation

Applied at configuration load time via safe_uri struct tags:

  • DNS resolves configured URLs
  • Rejects private IP ranges, loopback, link-local, localhost

Network Segmentation Model

The reference architecture uses four network zones:

Public Zone (DMZ)

  • Reverse proxy / ingress controller
  • TLS termination
  • Routes to wallet backend (8080, 8082), vc verifier, vc API gateway

Application Zone

  • All application services
  • Inter-service communication (HTTP, gRPC)
  • go-trust PDP (must not be directly public)

Data Zone

  • MongoDB (wallet backend)
  • PostgreSQL (vc, facetec-api)
  • Access restricted to application zone

Management Zone

  • Admin API (port 8081, management-plane exposure only)
  • Prometheus metrics scraping
  • CI/CD automation
  • Kubernetes probes

Operator Requirements

The platform provides port separation, per-port authentication, and SSRF protection. Operators must implement:

RequirementGuidance
Reverse proxy / IngressDeploy TLS-terminating reverse proxy in front of all public-facing ports
Network policiesRestrict inter-zone traffic: data zone accessible only from application zone; management zone isolated from public
Admin port isolationEnsure port 8081 is not reachable from public network; use Kubernetes NetworkPolicy or firewall rules
go-trust isolationDeploy go-trust behind service mesh or restrict to application-zone-only access
Metrics endpoint protectionRestrict /metrics to Prometheus infrastructure; do not expose publicly
Database accessRestrict MongoDB/PostgreSQL to application-zone source IPs; use mTLS where supported
Egress filteringControl outbound access; go-trust SafeHTTPClient handles SSRF, but other services need operator-level egress rules
Rate limiting at edgeComplement application-level rate limiting with infrastructure-level rate limiting at reverse proxy