@@ -9,6 +9,85 @@ The suite includes:
99
1010This project showcases lightweight, end-to-end request handling, proxying, and server communication in Go, all without third-party frameworks.
1111
12+ ### Highlevel Design
13+
14+ ``` mermaid
15+ graph TD
16+ Client -->|HTTPS Requests| ForwardProxy[Forward Proxy]
17+ ForwardProxy -->|Proxied Requests| ReverseProxy[Reverse Proxy]
18+ ReverseProxy -->|Routed Requests| HTTPServer1[HTTP Server 1]
19+ ReverseProxy -->|Routed Requests| HTTPServer2[HTTP Server 2]
20+ HTTPServer1 -->|Responses| ReverseProxy
21+ HTTPServer2 -->|Responses| ReverseProxy
22+ ReverseProxy -->|Proxied Responses| ForwardProxy
23+ ForwardProxy -->|Responses| Client
24+ ```
25+ ### TLS Communication Flow
26+
27+ ``` mermaid
28+ sequenceDiagram
29+ participant Client
30+ participant ForwardProxy as Forward Proxy<br/>Port: 6443<br/>(TLS Server)
31+ participant ReverseProxy as Reverse Proxy<br/>Port: 7443<br/>(TLS Server)
32+ participant HTTPServer as HTTP Server<br/>Port: 8443<br/>(mTLS Server)
33+
34+ Note over Client,HTTPServer: Phase 1: Client → Forward Proxy TLS
35+
36+ Client->>ForwardProxy: TLS Client Hello (TLSv1.3) with CA Certificate
37+ ForwardProxy->>Client: Server Hello + Certificate Chain
38+ Note right of ForwardProxy: CN=server<br/>Issuer: forward-proxy Root CA<br/>SAN: 127.0.0.1
39+ ForwardProxy->>Client: Certificate Verify + Finished
40+ Client->>ForwardProxy: Finished
41+ Note over Client,ForwardProxy: TLS Connection Established
42+
43+ Note over Client,HTTPServer: Phase 2: HTTP CONNECT Tunnel
44+
45+ Client->>ForwardProxy: CONNECT reverse-proxy-server:7443 HTTP/1.1<br/>Host: reverse-proxy-server:7443<br/>Proxy-Connection: Keep-Alive
46+ ForwardProxy->>Client: HTTP/1.1 200 Connection Established
47+ Note over Client,ForwardProxy: CONNECT Tunnel Established
48+
49+ Note over Client,HTTPServer: Phase 3: Client → Reverse Proxy TLS (through tunnel)
50+
51+ Client->>ReverseProxy: TLS Client Hello (TLSv1.3)<br/>via Forward Proxy tunnel
52+ ReverseProxy->>Client: Server Hello + Certificate Chain<br/>via Forward Proxy tunnel
53+ Note right of ReverseProxy: CN=server<br/>Issuer: reverse-proxy Root CA<br/>SAN: reverse-proxy-server
54+ ReverseProxy->>Client: Certificate Verify + Finished<br/>via Forward Proxy tunnel
55+ Client->>ReverseProxy: Finished<br/>via Forward Proxy tunnel
56+ Note over Client,ReverseProxy: End-to-End TLS Established
57+
58+ Note over Client,HTTPServer: Phase 4: HTTP Request/Response
59+
60+ Client->>ReverseProxy: GET /server1 HTTP/1.1<br/>Host: reverse-proxy-server:7443<br/>Accept: */*
61+
62+ Note over ReverseProxy,HTTPServer: Phase 5: Reverse Proxy → HTTP Server mTLS
63+
64+ ReverseProxy->>HTTPServer: mTLS Handshake (Client Cert Required)
65+ HTTPServer->>ReverseProxy: Server Certificate + Client Cert Request
66+ ReverseProxy->>HTTPServer: Client Certificate + Finished
67+ HTTPServer->>ReverseProxy: Certificate Verify + Finished
68+ Note over ReverseProxy,HTTPServer: mTLS Connection Established
69+
70+ ReverseProxy->>HTTPServer: GET /server1 HTTP/1.1 (over mTLS)
71+ HTTPServer->>ReverseProxy: HTTP/1.1 200 OK<br/>Content-Type: text/html
72+
73+ ReverseProxy->>Client: HTTP/1.1 200 OK<br/>Content-Type: text/html<br/>Connection: close<br/><br/>Hello from Server 1
74+
75+ Note over Client,HTTPServer: Certificate Chain Verification
76+
77+ rect rgb(240, 248, 255)
78+ Note over ForwardProxy: Server Cert: CN=server<br/>CA: forward-proxy Root CA<br/>Validates: --proxy-cacert ca.crt
79+ end
80+
81+ rect rgb(255, 248, 240)
82+ Note over ReverseProxy: Server Cert: CN=server<br/>CA: reverse-proxy Root CA<br/>Validates: --cacert ca.crt
83+ end
84+
85+ rect rgb(248, 255, 240)
86+ Note over HTTPServer: mTLS Required<br/>Client + Server Certificates<br/>Mutual Authentication
87+ end
88+ ```
89+
90+
1291---
1392
1493## Project Structure
@@ -84,6 +163,7 @@ Server 1:
84163
85164` ` ` bash
86165curl -v -x http://127.0.0.1:6790 http://reverse-proxy-server:7090/server1
166+ curl -v -x https://127.0.0.1:6443 --proxy-cacert ca.crt http://reverse-proxy-server:7090/server1
87167```
88168
89169Server 2:
0 commit comments