1
1
#! /usr/bin/env bash
2
2
3
+ function gen_pkey { # Params: [KEY_FILE]
4
+ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform PEM -nocrypt -out $1
5
+ }
6
+
7
+ function sign_with_ca { # Params: [KEY_FILE] [CN] [CRT_FILE]
8
+ openssl req -out request.csr -key $1 -subj " /CN=$2 " -new -sha256
9
+ openssl x509 -req -in request.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out $3 -days 365 -sha256
10
+ }
11
+
12
+ function export_config { # Params: [FILE/CONFIG_NAME]
13
+ content=` cat $1 | sed ' /---/d' | tr -d ' \n' `
14
+ echo " CONFIG_ESP_WIFI_REMOTE_EPPP_$1 =\" ${content} \" "
15
+ }
16
+
3
17
if [ -z " $1 " ]; then
4
18
echo " Usage $0 <SERVER_CN> [CLIENT_CN]"
5
19
exit 1;
@@ -12,30 +26,27 @@ echo "Server's CN: $SERVER_CN"
12
26
echo " Client's CN: $CLIENT_CN "
13
27
14
28
# # First create our own CA
15
- openssl genrsa -out ca.key 2048
29
+ gen_pkey ca.key
16
30
openssl req -new -x509 -subj " /C=CZ/CN=Espressif" -days 365 -key ca.key -out ca.crt
31
+ # will use the same CA for both server and client side
32
+ cp ca.crt SERVER_CA
33
+ cp ca.crt CLIENT_CA
17
34
18
35
# Server side
19
- openssl genrsa -out srv.key 2048
20
- openssl req -out srv.csr -key srv.key -subj " /CN=$SERVER_CN " -new -sha256
21
- openssl x509 -req -in srv.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out srv.crt -days 365 -sha256
36
+ gen_pkey SERVER_KEY
37
+ sign_with_ca SERVER_KEY $SERVER_CN SERVER_CRT
22
38
23
39
# Client side
24
- openssl genrsa -out client.key 2048
25
- openssl req -out client.csr -key client.key -subj " /CN=$CLIENT_CN " -new -sha256
26
- openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
40
+ gen_pkey CLIENT_KEY
41
+ sign_with_ca CLIENT_KEY $CLIENT_CN CLIENT_CRT
27
42
28
43
# # Generate config options
29
- # Client side:
30
- CA_CRT=` cat ca.crt | sed ' /---/d' | tr -d ' \n' `
31
- echo " CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_CA=\" $CA_CRT \" "
32
- CLIENT_CRT=` cat client.crt | sed ' /---/d' | tr -d ' \n' `
33
- echo " CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_CRT=\" $CLIENT_CRT \" "
34
- CLIENT_KEY=` cat client.key | sed ' /---/d' | tr -d ' \n' `
35
- echo " CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_KEY=\" $CLIENT_KEY \" "
36
- # # Server side (here it uses the same CA)
37
- echo " CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_CA=\" $CA_CRT \" "
38
- SERVER_CRT=` cat srv.crt | sed ' /---/d' | tr -d ' \n' `
39
- echo " CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_CRT=\" $SERVER_CRT \" "
40
- SERVER_KEY=` cat srv.key | sed ' /---/d' | tr -d ' \n' `
41
- echo " CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_KEY=\" $SERVER_KEY \" "
44
+ echo -e " \n# Client side: need own cert and key and ca-cert for server validation"
45
+ for f in SERVER_CA CLIENT_CRT CLIENT_KEY; do
46
+ export_config $f
47
+ done
48
+
49
+ echo -e " \n# Server side: need own cert and key and ca-cert for client validation"
50
+ for f in CLIENT_CA SERVER_CRT SERVER_KEY; do
51
+ export_config $f
52
+ done
0 commit comments