You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Go Keyless is an implementation CloudFlare's [Keyless SSL](https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/) Protocol in Go. It is provided as
7
8
an upgrade to the previous [C implementation](https://github.com/cloudflare/keyless).
8
9
10
+
## Protocol
11
+
12
+
The CloudFlare Keyless SSL client communicates to the server via a binary
13
+
protocol over a mutually authenticated TLS 1.2 tunnel. Messages are in binary
14
+
format and identified by a unique ID.
15
+
16
+
Messages consist of a fixed length header, and a variable length body. The
17
+
body of the message consists of a sequence of items in TLV (tag, length,
18
+
value) messages.
19
+
20
+
All messages with major version 1 will conform to the following
21
+
format. The minor version is currently set to 0 and is reserved for
22
+
communicating policy information.
23
+
24
+
Header:
25
+
26
+
0 - - 1 - - 2 - - 3 - - 4 - - - - 6 - - 7 - - 8
27
+
| Maj | Min | Length | ID |
28
+
| Body |
29
+
| Body | <- 8 + Length
30
+
31
+
Item:
32
+
33
+
0 - - 1 - - 2 - - 3 - - 4 - - - - 6 - - 7 - - 8
34
+
| Tag | Length | Data |
35
+
| Data | <- 3 + Length
36
+
37
+
All numbers are in network byte order (big endian).
38
+
39
+
The following tag values are possible for items:
40
+
41
+
0x01 - Certificate Digest,
42
+
0x02 - Server Name Indication,
43
+
0x03 - Client's IP address,
44
+
0x11 - Opcode,
45
+
0x12 - Payload,
46
+
47
+
A requests contains a header and the following items:
48
+
49
+
0x01 - length: 32 bytes, data: SHA256 of RSA modulus
50
+
0x02 - length: variable, data: SNI string
51
+
0x03 - length: 4 or 16 bytes, data: IPv4/6 address
0 commit comments