Skip to content

Commit c6b41ef

Browse files
authored
docs(s2n-tls-hyper): Add hyper client/server example (#5069)
1 parent e593a5b commit c6b41ef

13 files changed

+295
-60
lines changed

Diff for: bindings/rust-examples/Cargo.toml

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
[workspace]
22
members = [
3-
"client-hello-config-resolution", "tokio-server-client",
3+
"client-hello-config-resolution",
4+
"hyper-server-client",
5+
"tokio-server-client",
46
]
57
resolver = "2"
68

Diff for: bindings/rust-examples/certs/ca-cert.pem

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIB3DCCAWKgAwIBAgIUaAjZTaFhJNRyFtFQut1CdrY7RH0wCgYIKoZIzj0EAwMw
3-
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
4-
MjIwMzA3MDQwMDA4NDhaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
5-
EAYHKoZIzj0CAQYFK4EEACIDYgAEclmOmfFLoQR+mupZSc7J3IfZ6OV0IphUHWwv
6-
iH9BvkGh4OX+RZfafa4hw90A5fk0ps520Dt04tHwotLBNkdQcWDJunOhw8ydebIP
7-
TaP0V8OgxFs+P4kpBkMVNB3H+PK6o2MwYTAdBgNVHQ4EFgQU2ic6pZKpiyOr5aPt
8-
YhABB9hJC5QwHwYDVR0jBBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwDwYDVR0T
9-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDaAAwZQIxAMtZ
10-
+QqC0LGdqUxdr2woMr6pUNAaZYaxm6APPqyKsjVqNaKadiSueNbbbc+seKJXbwIw
11-
Zl0HNHzmoNAMkpgx5BCukjL1v07C571diSW4Z/P96t8tUzi/2rUOoFlJYU0B8cib
2+
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
3+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
4+
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
5+
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
6+
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
7+
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
8+
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
9+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
10+
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
11+
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
1212
-----END CERTIFICATE-----

Diff for: bindings/rust-examples/certs/generate.sh

+26
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ openssl req -new -noenc \
3636
-subj "/C=US/CN=kangaroo" \
3737
-addext "subjectAltName = DNS:www.kangaroo.com"
3838

39+
echo "generating localhost private key and CSR"
40+
openssl req -new -noenc \
41+
-newkey ec \
42+
-pkeyopt ec_paramgen_curve:P-384 \
43+
-keyout localhost-key.pem \
44+
-out localhost.csr \
45+
-subj "/C=US/CN=localhost" \
46+
-addext "subjectAltName = DNS:localhost"
47+
3948
echo "generating wombat server certificate and signing it"
4049
openssl x509 -days 65536 \
4150
-req -in wombat.csr \
@@ -56,6 +65,16 @@ openssl x509 -days 65536 \
5665
-out kangaroo-cert.pem \
5766
-copy_extensions=copyall
5867

68+
echo "generating localhost certificate and signing it"
69+
openssl x509 -days 65536 \
70+
-req -in localhost.csr \
71+
-SHA384 \
72+
-CA ca-cert.pem \
73+
-CAkey ca-key.pem \
74+
-CAcreateserial \
75+
-out localhost-cert.pem \
76+
-copy_extensions=copyall
77+
5978
touch wombat-chain.pem
6079
cat wombat-cert.pem >> wombat-chain.pem
6180
cat ca-cert.pem >> wombat-chain.pem
@@ -64,17 +83,24 @@ touch kangaroo-chain.pem
6483
cat kangaroo-cert.pem >> kangaroo-chain.pem
6584
cat ca-cert.pem >> kangaroo-chain.pem
6685

86+
touch localhost-chain.pem
87+
cat localhost-cert.pem >> localhost-chain.pem
88+
cat ca-cert.pem >> localhost-chain.pem
89+
6790
echo "verifying server certificates"
6891
openssl verify -CAfile ca-cert.pem wombat-cert.pem
6992
openssl verify -CAfile ca-cert.pem kangaroo-cert.pem
93+
openssl verify -CAfile ca-cert.pem localhost-cert.pem
7094

7195
# certificate signing requests are never used after the certs are generated
7296
rm wombat.csr
7397
rm kangaroo.csr
98+
rm localhost.csr
7499
rm ca-cert.srl
75100

76101
# the private keys of the CA are never needed after signing
77102
rm ca-key.pem
78103
rm wombat-cert.pem
79104
rm kangaroo-cert.pem
105+
rm localhost-cert.pem
80106

Diff for: bindings/rust-examples/certs/kangaroo-chain.pem

+21-21
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIB3TCCAWKgAwIBAgIUJhUgxiGTEOtg0JBtu9SrS7PPvo0wCgYIKoZIzj0EAwMw
3-
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
4-
MjIwMzA3MDQwMDA4NDhaMCAxCzAJBgNVBAYTAlVTMREwDwYDVQQDDAhrYW5nYXJv
5-
bzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCzesg6GHI5tMP4JuMvpiVHsc+CStyTy
6-
JQQZ4jyj4fVfgqCcPVo6qJq6DjPepMRkm5tLtFrdavl8/ZZpiCi5vLSymUxliFXD
7-
9DD8GO5naaBnW2EmuYCcNrB0FJJfKZurVKNfMF0wGwYDVR0RBBQwEoIQd3d3Lmth
8-
bmdhcm9vLmNvbTAdBgNVHQ4EFgQUNmsIZH0IDGVlSy7V6BYZTE6NX1QwHwYDVR0j
9-
BBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwCgYIKoZIzj0EAwMDaQAwZgIxAJzE
10-
GC8hKsqTmDxI4r7bewI/vjtKyEUf0BDJfRrSLixPySYRTbx950iHMo6kXB0DEwIx
11-
AO02gaF9weybuklR+DZ/j6EEZk4HlaRvN575vKmdDYIUF4KpFcT/8f85+5klj9Tl
12-
Hg==
2+
MIIB3TCCAWKgAwIBAgIUIbygx2K+SoQizZPmr+WpBYAyC+UwCgYIKoZIzj0EAwMw
3+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
4+
MjIwNDA3MDUyMTI0NTZaMCAxCzAJBgNVBAYTAlVTMREwDwYDVQQDDAhrYW5nYXJv
5+
bzB2MBAGByqGSM49AgEGBSuBBAAiA2IABJL7bfoMCdRnkr9f+OMYtZpoJ13hhGH8
6+
JqSdDQGSy/SfwEo8AbmDEF6tc3HGkCpx0/K1Q5lENshft6y+3n4Qn8q+9uy4aI/c
7+
+fm8FHKbooe748nwxdHo+GczlzJwPR3I9qNfMF0wGwYDVR0RBBQwEoIQd3d3Lmth
8+
bmdhcm9vLmNvbTAdBgNVHQ4EFgQUaLUgNRONUSKhwjyLrkuYSvOGDoIwHwYDVR0j
9+
BBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwCgYIKoZIzj0EAwMDaQAwZgIxAPqf
10+
TV3w4egUT/MeS4BowJ4//N0NoBr0ohN+Ea2aAv5REiMJXJ/VfScvJMOfcGdzbQIx
11+
ANO56JKO/54WKd/14Xft0yKiHKCkRaazqngDw9L9jZo5QA1gEcDkWETBzjSdJ4ys
12+
0w==
1313
-----END CERTIFICATE-----
1414
-----BEGIN CERTIFICATE-----
15-
MIIB3DCCAWKgAwIBAgIUaAjZTaFhJNRyFtFQut1CdrY7RH0wCgYIKoZIzj0EAwMw
16-
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
17-
MjIwMzA3MDQwMDA4NDhaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
18-
EAYHKoZIzj0CAQYFK4EEACIDYgAEclmOmfFLoQR+mupZSc7J3IfZ6OV0IphUHWwv
19-
iH9BvkGh4OX+RZfafa4hw90A5fk0ps520Dt04tHwotLBNkdQcWDJunOhw8ydebIP
20-
TaP0V8OgxFs+P4kpBkMVNB3H+PK6o2MwYTAdBgNVHQ4EFgQU2ic6pZKpiyOr5aPt
21-
YhABB9hJC5QwHwYDVR0jBBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwDwYDVR0T
22-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDaAAwZQIxAMtZ
23-
+QqC0LGdqUxdr2woMr6pUNAaZYaxm6APPqyKsjVqNaKadiSueNbbbc+seKJXbwIw
24-
Zl0HNHzmoNAMkpgx5BCukjL1v07C571diSW4Z/P96t8tUzi/2rUOoFlJYU0B8cib
15+
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
16+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
17+
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
18+
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
19+
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
20+
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
21+
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
22+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
23+
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
24+
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
2525
-----END CERTIFICATE-----

Diff for: bindings/rust-examples/certs/kangaroo-key.pem

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDB8OJA0z/nzPkogIasW
3-
B8xhhROb0sDbHEqYwStAdDKEWGCLGyy46/5sMprtht8bBpahZANiAAQs3rIOhhyO
4-
bTD+CbjL6YlR7HPgkrck8iUEGeI8o+H1X4KgnD1aOqiaug4z3qTEZJubS7Ra3Wr5
5-
fP2WaYgouby0splMZYhVw/Qw/BjuZ2mgZ1thJrmAnDawdBSSXymbq1Q=
2+
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDQb27I4N/bli1Akl+n
3+
t2jd6CEXwqQbpcgD9lgEXBYigObKYfXb08UNZDC3HH4VVNahZANiAASS+236DAnU
4+
Z5K/X/jjGLWaaCdd4YRh/CaknQ0Bksv0n8BKPAG5gxBerXNxxpAqcdPytUOZRDbI
5+
X7esvt5+EJ/KvvbsuGiP3Pn5vBRym6KHu+PJ8MXR6PhnM5cycD0dyPY=
66
-----END PRIVATE KEY-----

Diff for: bindings/rust-examples/certs/localhost-chain.pem

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIB1TCCAVygAwIBAgIUIbygx2K+SoQizZPmr+WpBYAyC+YwCgYIKoZIzj0EAwMw
3+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
4+
MjIwNDA3MDUyMTI0NTZaMCExCzAJBgNVBAYTAlVTMRIwEAYDVQQDDAlsb2NhbGhv
5+
c3QwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR2LB4AO/2VunUoHiAtRESZM+by7BGs
6+
T9rYfTfRksznhwhutBT1uEFlCMJdUWt48DYDPiURi8p0Tyeb/eXTtVsvRmXcg99J
7+
Fnih1VZj7EORZxi+ERGnRE26Um+5Ki/UORyjWDBWMBQGA1UdEQQNMAuCCWxvY2Fs
8+
aG9zdDAdBgNVHQ4EFgQUEcK0db2ctmhGC17lC0irWUAeVDEwHwYDVR0jBBgwFoAU
9+
SvDRw0hufm/4UxQSm97QrxknijwwCgYIKoZIzj0EAwMDZwAwZAIwMp8U0i0Ibwyk
10+
JOWyY3ZC36xMask8C9jomulEikG96+6fJpGywxDc40ZIqTD0ze74AjBWF10vPSZh
11+
mW6WtIZ0Xf4yRxXb9EY6+LMWbQMHVkE2ec5+WEvfUFf72bGUTWPKWSw=
12+
-----END CERTIFICATE-----
13+
-----BEGIN CERTIFICATE-----
14+
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
15+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
16+
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
17+
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
18+
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
19+
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
20+
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
21+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
22+
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
23+
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
24+
-----END CERTIFICATE-----

Diff for: bindings/rust-examples/certs/localhost-key.pem

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDnJ1xbUHAxZthbja8u
3+
7QZBCRQg+/lsKjZzswdK9EW6gzlL+RLg5JsMNAEHJgbRZcihZANiAAR2LB4AO/2V
4+
unUoHiAtRESZM+by7BGsT9rYfTfRksznhwhutBT1uEFlCMJdUWt48DYDPiURi8p0
5+
Tyeb/eXTtVsvRmXcg99JFnih1VZj7EORZxi+ERGnRE26Um+5Ki/UORw=
6+
-----END PRIVATE KEY-----

Diff for: bindings/rust-examples/certs/wombat-chain.pem

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIB2DCCAV6gAwIBAgIUJhUgxiGTEOtg0JBtu9SrS7PPvowwCgYIKoZIzj0EAwMw
3-
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
4-
MjIwMzA3MDQwMDA4NDhaMB4xCzAJBgNVBAYTAlVTMQ8wDQYDVQQDDAZ3b21iYXQw
5-
djAQBgcqhkjOPQIBBgUrgQQAIgNiAARUye9Qgw5N7T8nk6DFoUwPVzSnQy9v4v0V
6-
8SOUZmRwBqmFSJ9Vm988BwAcPFHdmQ13Za4XTkDbQvMmgzntIIIziiyaJQAazRFG
7-
Y2Ex4V/YBiIsuh5wPOXjtvOtgVMXBgijXTBbMBkGA1UdEQQSMBCCDnd3dy53b21i
8-
YXQuY29tMB0GA1UdDgQWBBS+Tbl0gagSNimLM5q2EgeBIMEAfzAfBgNVHSMEGDAW
9-
gBTaJzqlkqmLI6vlo+1iEAEH2EkLlDAKBggqhkjOPQQDAwNoADBlAjAKqbrvk9by
10-
G278VLs7F8uvc1mFYYWv/ZnnQIEJT8srO+P57PtC5FBId5oK28P41EUCMQCim4LR
11-
KzY/PcdY8NlAcHu/caWvGH2+FWm7jFyr8As5oXT0swbqYmMqpaK6E2EZNIk=
2+
MIIB2DCCAV6gAwIBAgIUIbygx2K+SoQizZPmr+WpBYAyC+QwCgYIKoZIzj0EAwMw
3+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
4+
MjIwNDA3MDUyMTI0NTZaMB4xCzAJBgNVBAYTAlVTMQ8wDQYDVQQDDAZ3b21iYXQw
5+
djAQBgcqhkjOPQIBBgUrgQQAIgNiAAS+0VxsqVGqGA00CH7TNweWiBQCo8077bxm
6+
YL67K1IbKUL9A7/E0QvpXKX+ZL5avFf+Xuq73YwjHDluvciNfyYp7S2GOa9bB3Yj
7+
X1O6VWye3LP2IPqDRPfrECsULfZ47rGjXTBbMBkGA1UdEQQSMBCCDnd3dy53b21i
8+
YXQuY29tMB0GA1UdDgQWBBTQuywWPes6160/3Gkd99q/Ay+0BjAfBgNVHSMEGDAW
9+
gBRK8NHDSG5+b/hTFBKb3tCvGSeKPDAKBggqhkjOPQQDAwNoADBlAjBUr2pSfpp+
10+
nXtuaH371DPGycbZK+BiV4GsKd2JHhDc8+3j+lPqWfPzzmLwZjtqpCwCMQCQ5kvk
11+
BT842pRPe8K5zsD3tw8cuQIMUUY2joifFG2YUcku7KMIrJzn3HmdglCh98E=
1212
-----END CERTIFICATE-----
1313
-----BEGIN CERTIFICATE-----
14-
MIIB3DCCAWKgAwIBAgIUaAjZTaFhJNRyFtFQut1CdrY7RH0wCgYIKoZIzj0EAwMw
15-
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjQwMTI3MDAwODQ4WhgP
16-
MjIwMzA3MDQwMDA4NDhaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
17-
EAYHKoZIzj0CAQYFK4EEACIDYgAEclmOmfFLoQR+mupZSc7J3IfZ6OV0IphUHWwv
18-
iH9BvkGh4OX+RZfafa4hw90A5fk0ps520Dt04tHwotLBNkdQcWDJunOhw8ydebIP
19-
TaP0V8OgxFs+P4kpBkMVNB3H+PK6o2MwYTAdBgNVHQ4EFgQU2ic6pZKpiyOr5aPt
20-
YhABB9hJC5QwHwYDVR0jBBgwFoAU2ic6pZKpiyOr5aPtYhABB9hJC5QwDwYDVR0T
21-
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDaAAwZQIxAMtZ
22-
+QqC0LGdqUxdr2woMr6pUNAaZYaxm6APPqyKsjVqNaKadiSueNbbbc+seKJXbwIw
23-
Zl0HNHzmoNAMkpgx5BCukjL1v07C571diSW4Z/P96t8tUzi/2rUOoFlJYU0B8cib
14+
MIIB2zCCAWKgAwIBAgIUFGw6MYghVw9GrlpnQwZUmB0HHbwwCgYIKoZIzj0EAwMw
15+
HDELMAkGA1UEBhMCVVMxDTALBgNVBAMMBHJvb3QwIBcNMjUwMTI4MjEyNDU2WhgP
16+
MjIwNDA3MDUyMTI0NTZaMBwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQDDARyb290MHYw
17+
EAYHKoZIzj0CAQYFK4EEACIDYgAEAzmebLd0GPptVlLK68gdNVVxmzTqI/ppHwYs
18+
rn8D+0yUvD2SZj8Pkxq+Ow/gVK16CC2pY9o24xagYRhJ9RUgIrocC9k0c61QquXq
19+
Sz58dWyajw5/gBGFxryWlaoRiC4uo2MwYTAdBgNVHQ4EFgQUSvDRw0hufm/4UxQS
20+
m97QrxknijwwHwYDVR0jBBgwFoAUSvDRw0hufm/4UxQSm97QrxknijwwDwYDVR0T
21+
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwCgYIKoZIzj0EAwMDZwAwZAIwCnoD
22+
mXfz4EZaUBZpfKbYBg6GxdGbpURJkWD4TaYK75JqWSYsQNZQQpCOOBG5zjcGAjAl
23+
i5bAyEtIJW33HzZUuCpZpc6rhFLv97b4HIRdDd1kgSMYBwUfi371de/H24vuC/s=
2424
-----END CERTIFICATE-----

Diff for: bindings/rust-examples/certs/wombat-key.pem

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDO2TkDRDnGfKAvjH9+
3-
SliejJgLp6ONEdNAgfimOEDWgfMJiyYEPp9WhZkASDVTaB2hZANiAARUye9Qgw5N
4-
7T8nk6DFoUwPVzSnQy9v4v0V8SOUZmRwBqmFSJ9Vm988BwAcPFHdmQ13Za4XTkDb
5-
QvMmgzntIIIziiyaJQAazRFGY2Ex4V/YBiIsuh5wPOXjtvOtgVMXBgg=
2+
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCKRIdzyeIA/FHH3W4p
3+
ZsAyrZJgeJSwwAksPKP2gSzCfgk0xMETNLix0+2wwDfrFOChZANiAAS+0VxsqVGq
4+
GA00CH7TNweWiBQCo8077bxmYL67K1IbKUL9A7/E0QvpXKX+ZL5avFf+Xuq73Ywj
5+
HDluvciNfyYp7S2GOa9bB3YjX1O6VWye3LP2IPqDRPfrECsULfZ47rE=
66
-----END PRIVATE KEY-----
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[package]
2+
name = "hyper-server-client"
3+
version.workspace = true
4+
authors.workspace = true
5+
publish.workspace = true
6+
license.workspace = true
7+
edition.workspace = true
8+
9+
[dependencies]
10+
s2n-tls = { path = "../../rust/extended/s2n-tls" }
11+
s2n-tls-tokio = { path = "../../rust/extended/s2n-tls-tokio" }
12+
s2n-tls-hyper = { path = "../../rust/standard/s2n-tls-hyper" }
13+
tokio = { version = "1", features = ["full"] }
14+
hyper = { version = "1" }
15+
hyper-util = { version = "0.1", features = ["client-legacy", "server", "tokio", "http1", "http2"]}
16+
http-body-util = { version = "0.1" }
17+
clap = { version = "4", features = ["derive"]}
18+
http = { version = "1" }
19+
bytes = { version = "1" }

Diff for: bindings/rust-examples/hyper-server-client/README.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
This example demonstrates how to use s2n-tls with the [hyper](https://hyper.rs/) HTTP library.
2+
3+
The server example demonstrates how to use s2n-tls with the [hyper-util server](https://docs.rs/hyper-util/latest/hyper_util/server/conn/auto/struct.Builder.html). The client example demonstrates how to use s2n-tls with the [hyper-util client](https://docs.rs/hyper-util/latest/hyper_util/client/legacy/struct.Builder.html), via the [s2n-tls-hyper](../../rust/standard/s2n-tls-hyper) compatibility crate.
4+
5+
Start the example server as follows:
6+
```
7+
cargo run --bin server
8+
```
9+
10+
The server will listen for incoming TLS connections, and echo the contents of HTTP requests back to the client in an HTTP response.
11+
12+
Connect to the server with the example client as follows:
13+
```
14+
cargo run --bin client -- --body "some text to send to the server"
15+
```
16+
17+
The example client simply sends a GET request to the server, and can be configured to use a different server address:
18+
```
19+
cargo run --bin client -- --addr www.amazon.com
20+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
use bytes::Bytes;
5+
use clap::Parser;
6+
use http_body_util::{BodyExt, Full};
7+
use hyper_util::{client::legacy::Client, rt::TokioExecutor};
8+
use std::error::Error;
9+
use std::str::FromStr;
10+
11+
/// NOTE: this CA is to be used for demonstration purposes only!
12+
const CA: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/../certs/ca-cert.pem"));
13+
14+
#[derive(Parser)]
15+
struct Args {
16+
#[clap(short, long, default_value = "localhost:8888")]
17+
addr: String,
18+
#[clap(short, long, default_value = "")]
19+
body: String,
20+
}
21+
22+
async fn run_client(addr: &str, request_body: Vec<u8>) -> Result<(), Box<dyn Error>> {
23+
// Configure the s2n-tls client.
24+
let config = {
25+
let mut builder = s2n_tls::config::Builder::new();
26+
builder.trust_pem(CA)?;
27+
builder.build()?
28+
};
29+
30+
// Create a hyper-util client with this configuration, using the s2n-tls-hyper HttpsConnector.
31+
let connector = s2n_tls_hyper::connector::HttpsConnector::new(config);
32+
let client: Client<_, Full<Bytes>> = Client::builder(TokioExecutor::new()).build(connector);
33+
34+
// Create an HTTP request to send to the server.
35+
let uri = http::Uri::from_str(format!("https://{addr}/").as_str())?;
36+
let request: http::Request<Full<Bytes>> = http::Request::builder()
37+
.method(http::Method::GET)
38+
.uri(uri)
39+
.body(Full::from(request_body.clone()))?;
40+
41+
// Send the request to the server.
42+
let response = client.request(request).await?;
43+
assert_eq!(response.status(), http::StatusCode::OK);
44+
45+
// Get the response body.
46+
let response_body = response.into_body().collect().await?.to_bytes();
47+
println!(
48+
"Response body: \n{}",
49+
String::from_utf8_lossy(&response_body)
50+
);
51+
52+
Ok(())
53+
}
54+
55+
#[tokio::main]
56+
async fn main() -> Result<(), Box<dyn Error>> {
57+
let args = Args::parse();
58+
run_client(&args.addr, args.body.into_bytes()).await?;
59+
Ok(())
60+
}

0 commit comments

Comments
 (0)