Skip to content

Commit 8e76166

Browse files
authored
Merge pull request #3 from dgarske/dev_1.1
2 parents fe6faab + 1da40af commit 8e76166

File tree

25 files changed

+881
-788
lines changed

25 files changed

+881
-788
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ diff
4040
# applications
4141
src/wolfkeymgr
4242
examples/middlebox/decrypt
43-
examples/etsi_test/etsi_test
43+
examples/ets_test/ets_test
4444
examples/https/client
4545
examples/https/server
4646
libtool

README.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# wolf Key Manager
1+
# wolf Key Manager for Enterprise Transport Security (ETS)
22

3-
This is a secure service for Key management based on ETSI Enterprise Transport Security specification. Provides middle-box decryption of TLS traffic.
3+
This is a secure key management service for providing middle-box decryption of TLS traffic.
44

55
The library includes examples to demonstrate full passive decryption of an HTTPS server. We also have a demo package for Apache httpd available by request.
66

@@ -23,11 +23,11 @@ Based on:
2323

2424
* keymanager.c: The main entry point
2525
* sock_mgr.c: The libevent socket manager
26-
* svc_[]: Services exposed (ETSI)
27-
* mod_[]: Modules for support (HTTP, TLS, Socket, ETSI and Vault)
26+
* svc_[]: Services exposed (ETS)
27+
* mod_[]: Modules for support (HTTP, TLS, Socket, ETS and Vault)
2828
* wkm_[]: Generic wolf / KeyManager functions
2929

30-
## ETSI Design
30+
## ETS Design
3131

3232
Server Side
3333
1) KeyGen (Gen Key)
@@ -36,7 +36,7 @@ Server Side
3636
4) Key expiration and notification of new key to peers
3737

3838
Client side
39-
1) Encoding ETSI HTTP request
39+
1) Encoding ETS HTTP request
4040
2) Parsing HTTP response
4141
3) Unbundling asymmetric key
4242

@@ -106,7 +106,7 @@ installed, then proceed to the next step.
106106

107107
## Examples
108108

109-
The wolf Key Manager includes examples for ETSI client tests, HTTPS server / client and middle-box decryption.
109+
The wolf Key Manager includes examples for ETS client tests, HTTPS server / client and middle-box decryption.
110110

111111
All test parameters for these examples are in the `examples/test_config.h`.
112112

@@ -136,22 +136,22 @@ wolfKeyManager 1.0
136136

137137
To exit the key manager use ctrl+c.
138138

139-
### ETSI Test client
139+
### ETS Test client
140140

141-
This demonstrates secure interactions with the key manager service using the ETSI HTTPS GET/PUT commands for different key types.
141+
This demonstrates secure interactions with the key manager service using the ETS HTTPS GET/PUT commands for different key types.
142142

143143
```sh
144-
$ ./examples/etsi_test/etsi_test -?
145-
etsi_test 1.0
144+
$ ./examples/ets_test/ets_test -?
145+
ets_test 1.0
146146
-? Help, print this usage
147147
-e Error mode, force error response
148148
-h <str> Host to connect to, default localhost
149149
-p <num> Port to connect to, default 8119
150150
-t <num> Thread pool size (stress test), default 0
151151
-l <num> Log Level (1=Error to 4=Debug), default 4
152152
-r <num> Requests per thread, default 1
153-
-f <file> <file> to store ETSI response
154-
-u Use ETSI Push (default is get)
153+
-f <file> <file> to store ETS response
154+
-u Use ETS Push (default is get)
155155
-s <sec> Timeout seconds (default 10)
156156
-k <pem> TLS Client TLS Key, default certs/client-key.pem
157157
-w <pass> TLS Client Key Password, default wolfssl
@@ -164,32 +164,32 @@ etsi_test 1.0
164164

165165
This client also support stress testing options:
166166
* Use the thread pool "-t" to spin up more threads.
167-
* Use the ETSI test client "-r" to make additional requests per thread.
167+
* Use the ETS test client "-r" to make additional requests per thread.
168168
* Use the "-F" argument to get key for specific fingerprint (hex string of hash of public key - first 80 bits / 10 bytes)
169169
* Use the "-C" command to include context string (used for multiple servers).
170170

171-
#### ETSI Fingerprint
171+
#### ETS Fingerprint
172172

173173
The fingerprint is a SHA-256 hash of the ephemeral public key with the first 80 bits (10 bytes) in big endian format. If the fingerprint is blank the current active key for that TLS group will be returned (assuming it is within the expiration and use count restrictions).
174174

175175
The fingerprint is used to lookup an ephemeral key based on public key using the following scheme:
176176
* ECC: Public X and Y hashed with SHA256 (first 10 bytes)
177177
* DH: Public key hashed with SHA256 (first 10 bytes)
178178

179-
#### ETSI Context String
179+
#### ETS Context String
180180

181181
The context string is used to specify additional information to the key manager to distribute keys for multiple servers.
182182

183183
### HTTP Server / Client
184184

185-
We have included a simple HTTPS server to show getting the static ephemeral key using the ETSI client and key manager.
185+
We have included a simple HTTPS server to show getting the static ephemeral key using the ETS client and key manager.
186186

187187
```
188188
./examples/https/server
189189
190190
HTTPS Server: Port 443
191191
192-
Jun 15 14:26:54 2021: [INFO] Connected to ETSI service
192+
Jun 15 14:26:54 2021: [INFO] Connected to ETS service
193193
Jun 15 14:26:54 2021: [INFO] Sent get request (117 bytes)
194194
Jun 15 14:26:54 2021: [DEBUG] HTTP HTTP/1.1
195195
Jun 15 14:26:54 2021: [DEBUG] Code 200: OK
@@ -199,8 +199,8 @@ Jun 15 14:26:54 2021: [DEBUG] Connection: : Keep-Alive
199199
Jun 15 14:26:54 2021: [DEBUG] Expires: : Tue, 15 Jun 2021 15:26:46 PDT
200200
Jun 15 14:26:54 2021: [DEBUG] Content-Length: : 121
201201
Jun 15 14:26:54 2021: [DEBUG] Body Size: 121
202-
Jun 15 14:26:54 2021: [INFO] Got ETSI response (121 bytes)
203-
Got ETSI static ephemeral key (121 bytes)
202+
Jun 15 14:26:54 2021: [INFO] Got ETS response (121 bytes)
203+
Got ETS static ephemeral key (121 bytes)
204204
Jun 15 14:26:54 2021: [INFO] SECP256R1: E24EF332747DF70CD4E5
205205
206206
TLS Accept 127.0.0.1
@@ -215,7 +215,7 @@ Jun 15 14:27:01 2021: [DEBUG] Connection: : keep-alive
215215
Jun 15 14:27:01 2021: [DEBUG] Accept-Encoding: : gzip, deflate, br
216216
Jun 15 14:27:01 2021: [DEBUG] User-Agent: : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1 Safari/605.1.15
217217
218-
ETSI Key Cached (valid for 3585 sec)
218+
ETS Key Cached (valid for 3585 sec)
219219
```
220220

221221
### Middle-Box Decryption of TLS traffic
@@ -269,9 +269,9 @@ Aug 03 15:05:21 2021: [INFO] Item Count: 0
269269
Aug 03 15:05:21 2021: [INFO] Total Size: 0
270270
Aug 03 15:05:21 2021: [WARN] Generating new SECP256R1 key
271271
Aug 03 15:05:21 2021: [INFO] Binding listener :::8119
272-
Aug 03 15:05:21 2021: [INFO] Setting up new ETSI conn item pool
273-
Aug 03 15:05:21 2021: [INFO] Growing ETSI service conn pool
274-
Aug 03 15:05:21 2021: [INFO] Growing ETSI service conn pool
272+
Aug 03 15:05:21 2021: [INFO] Setting up new ETS conn item pool
273+
Aug 03 15:05:21 2021: [INFO] Growing ETS service conn pool
274+
Aug 03 15:05:21 2021: [INFO] Growing ETS service conn pool
275275
Aug 03 15:05:21 2021: [INFO] SECP256R1: E24EF332747DF70CD4E5
276276
Aug 03 15:05:21 2021: [WARN] Vault Auth: Setting up new encryption key
277277
Aug 03 15:05:21 2021: [INFO] Next key renewal 3600 seconds
@@ -280,7 +280,7 @@ Aug 03 15:05:21 2021: [INFO] Next key renewal 3600 seconds
280280
```
281281
% ./examples/https/server
282282
HTTPS Server: Port 443
283-
Aug 03 15:09:50 2021: [INFO] Connected to ETSI service
283+
Aug 03 15:09:50 2021: [INFO] Connected to ETS service
284284
```
285285

286286
```
@@ -293,10 +293,10 @@ server = ::1
293293
server = fe80::1
294294
Enter the port to scan [default: 443]:
295295
Enter the server key [default: https://localhost:8119]:
296-
Aug 03 15:07:33 2021: [INFO] Connected to ETSI service
296+
Aug 03 15:07:33 2021: [INFO] Connected to ETS service
297297
...
298298
299-
Got ETSI static ephemeral key (121 bytes)
299+
Got ETS static ephemeral key (121 bytes)
300300
Aug 03 15:07:33 2021: [INFO] SECP256R1: E24EF332747DF70CD4E5
301301
Loaded key for fe80::1:443
302302
SSL App Data(30:323):GET / HTTP/1.1

docs/README.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
# wolf Key Manager ETSI Reference
1+
# wolf Key Manager ETS Reference
22

33
Based on [ETSI TS 103 523-3 V1.3.1](https://www.etsi.org/deliver/etsi_ts/103500_103599/10352303/01.03.01_60/ts_10352303v010301p.pdf)
44

55
## Components
66

7-
![ETSI Components](ETSI-Components.png)
7+
![ETS Components](ETS-Components.png)
88

99
* Key Manager (`src/wolfkeymgr`)
1010
* Enterprise Transport Security Server (`examples/https/server` or Apache httpd, nginx, etc...)
1111
* Middlebox Decryption (`examples/middlebox/decrypt` using wolfSSL sniffer)
1212
* TLS v1.3 client (browser or `examples/https/client`)
1313
* Asymmetric Key Package (RFC 5958 - PKCS8)
1414

15-
## ETSI Security
15+
## ETS Security
1616

17-
All communication between consumer and ETSI Key Manager will use TLS v1.3 with mutual authentication.
17+
All communication between consumer and ETS Key Manager will use TLS v1.3 with mutual authentication.
1818

1919
The Enterprise Transport Security profile does not provide per-session forward secrecy. Knowledge of a given static private key can be used to decrypt all sessions encrypted with that key, and forward secrecy for all of those sessions begins when all copies of that static private key have been destroyed.
2020

2121
Typically an organization will use standard TLS 1.3 to connect with external clients to the enterprise network or data centre. For connections within its own data center and could deployments the Enterprise Transport Security profile can be used.
2222

2323
An organization can rotate their keys as frequently as they choose.
2424

25-
The use of X.509 Visibility Information in the TLS server certificate should be used, but is not required for private internal use. The visibility information OID 0.4.0.3523.3.1 provides a public way to indicate the ETSI security profile is being used.
25+
The use of X.509 Visibility Information in the TLS server certificate should be used, but is not required for private internal use. The visibility information OID 0.4.0.3523.3.1 provides a public way to indicate the ETS security profile is being used.
2626

27-
## ETSI (Enterprise Transport Security)
27+
## ETS (Enterprise Transport Security)
2828

29-
### ETSI Request Case (HTTPS GET)
29+
### ETS Request Case (HTTPS GET)
3030

3131
`GET /.well-known/enterprise-transport-security/keys?fingerprints=[fingerprints]`, where:
3232

@@ -43,7 +43,7 @@ GET /.well-known/enterprise-transport-security/keys?fingerprints=000102030405060
4343
Accept: application/pkcs8, application/cms
4444
```
4545

46-
### ETSI Request with Groups (key type)
46+
### ETS Request with Groups (key type)
4747

4848
`GET /.well-known/enterprise-transport- security/keys?groups=[groups]&certs=[sigalgs]&context=contextstr`, where:
4949

@@ -64,7 +64,7 @@ GET /.well-known/enterprise-transport-security/keys?groups=0x0018,0x001d&certs=0
6464
Accept: application/pkcs8
6565
```
6666

67-
### ETSI Push (HTTPS PUT)
67+
### ETS Push (HTTPS PUT)
6868

6969
The key consumer shall support receiving a key package via an HTTP PUT request to a request-target, given here in origin-form, of:
7070
`/enterprise-transport-security/keys`
@@ -88,7 +88,7 @@ in the Asymmetric Key Package shall have the following fields set as follows:
8888

8989
### Server Certificate Visibility
9090

91-
The ETSI specification part 3 section 4.3.3 requires the TLS server to present a "visibility" information field indicating "Enterprise Transport Security" is being used.
91+
The ETSI ETS specification part 3 section 4.3.3 requires the TLS server to present a "visibility" information field indicating "Enterprise Transport Security" is being used.
9292

9393
```
9494
VisibilityInformation ::= SEQUENCE {

docs/include.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44

55

66
EXTRA_DIST += docs/README.md
7-
EXTRA_DIST += docs/ETSI-Components.png
7+
EXTRA_DIST += docs/ETS-Components.png

0 commit comments

Comments
 (0)