Skip to content

Commit a97c9e1

Browse files
committed
Add design diagrams
1 parent 35daa34 commit a97c9e1

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

README.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,85 @@ The suite includes:
99

1010
This 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
86165
curl -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

89169
Server 2:

0 commit comments

Comments
 (0)