Skip to content

Commit ee10978

Browse files
testing improvements (from #10542):
- *_wire_sni test is now more efficient - openssl-ech workflow now does interop with ECH rejection extra improvements: - tested TLSX_EchSwapExtensions - added ctx level SNI to padding calculation - Improvement of SNI handling for ECH
1 parent 31ddc5b commit ee10978

6 files changed

Lines changed: 661 additions & 284 deletions

File tree

.github/scripts/openssl-ech.sh

Lines changed: 68 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ cleanup() {
1111
trap cleanup EXIT
1212

1313
usage() {
14-
echo "Usage: $0 <client|server> [--suite <KEM,KDF,AEAD>] [--pqc <group>] [--hrr] [--workspace <path>]"
14+
echo "Usage: $0 <client|server> [--suite <KEM,KDF,AEAD>] [--pqc <group>] [--hrr] [--reject] [--workspace <path>]"
1515
exit 1
1616
}
1717

@@ -22,6 +22,7 @@ MODE=""
2222
SUITE=""
2323
PQC=""
2424
FORCE_HRR=0
25+
REJECT=0
2526

2627
WORKSPACE=${GITHUB_WORKSPACE:-"."}
2728

@@ -51,6 +52,10 @@ while [ $# -gt 0 ]; do
5152
FORCE_HRR=1
5253
shift
5354
;;
55+
--reject)
56+
REJECT=1
57+
shift
58+
;;
5459
--workspace)
5560
[ -z "$2" ] && { echo "ERROR: --workspace requires a value"; exit 1; }
5661
WORKSPACE="$2"
@@ -84,9 +89,16 @@ WOLFSSL_CLIENT=${WOLFSSL_CLIENT:-"$WORKSPACE/examples/client/client"}
8489
WOLFSSL_SERVER=${WOLFSSL_SERVER:-"$WORKSPACE/examples/server/server"}
8590
CERT_DIR=${CERT_DIR:-"$WORKSPACE/certs"}
8691

92+
# correct ECH config, but it's old, ECH will be rejected
93+
REJECT_ECH_CONFIG="AD7+DQA6rAAgACCATZdDlHed6GlDeiYsu3r7sdWUkLVHZuTa3lbOf+hIbAAEAAEAAQALZXhhbXBsZS5jb20AAA=="
94+
8795
TMP_LOG="$WORKSPACE/tmp_file.log"
96+
# Will need to look into validating the name against the cert for the OSSL cli.
97+
# This is fine, but should be upgraded to use a second cert in the future.
8898
PRIV_NAME="ech-private-name.com"
89-
PUB_NAME="ech-public-name.com"
99+
# example.com is taken from the server certificate,
100+
# echConfigs needs to authenticate against the cert with this name to succeed
101+
PUB_NAME="example.com"
90102
MAX_WAIT=50
91103

92104
# --------------------------------------------------------------------------
@@ -128,6 +140,8 @@ openssl_server(){
128140

129141
# parse ECH config from file
130142
ech_config=$(sed -n '/BEGIN ECHCONFIG/,/END ECHCONFIG/{/BEGIN ECHCONFIG\|END ECHCONFIG/d;p}' "$ech_file" | tr -d '\n')
143+
# reject overrides the config the client connects with
144+
[ "$REJECT" -ne 0 ] && ech_config="$REJECT_ECH_CONFIG"
131145
echo "parsed ech config: $ech_config" &>> "$TMP_LOG"
132146

133147
# start OpenSSL ECH server with ephemeral port; line-buffer so the
@@ -158,17 +172,29 @@ openssl_server(){
158172
done
159173
echo "parsed port: $port" &>> "$TMP_LOG"
160174

161-
# test with wolfssl client
162-
$WOLFSSL_CLIENT -v 4 \
163-
-p "$port" \
164-
-S "$PRIV_NAME" \
165-
--ech "$ech_config" \
166-
$wolfssl_extra \
167-
&>> "$TMP_LOG"
168-
169175
rm -f "$ech_file"
170176

171-
grep -q "ech_success=1" "$TMP_LOG"
177+
# test with wolfssl client
178+
if [ "$REJECT" -ne 0 ]; then
179+
$WOLFSSL_CLIENT -v 4 \
180+
-p "$port" \
181+
-S "$PRIV_NAME" \
182+
--ech "$ech_config" \
183+
$wolfssl_extra \
184+
&>> "$TMP_LOG" || true
185+
186+
grep -q "ECH offered but rejected by server" "$TMP_LOG"
187+
grep -q "ech_success=0" "$TMP_LOG"
188+
else
189+
$WOLFSSL_CLIENT -v 4 \
190+
-p "$port" \
191+
-S "$PRIV_NAME" \
192+
--ech "$ech_config" \
193+
$wolfssl_extra \
194+
&>> "$TMP_LOG"
195+
196+
grep -q "ech_success=1" "$TMP_LOG"
197+
fi
172198
}
173199

174200
# --------------------------------------------------------------------------
@@ -246,21 +272,39 @@ openssl_client(){
246272
exit 1
247273
fi
248274
done
275+
# reject overrides the config the client connects with
276+
[ "$REJECT" -ne 0 ] && ech_config="$REJECT_ECH_CONFIG"
249277
echo "parsed ech config: $ech_config" &>> "$TMP_LOG"
250278

251-
# test with OpenSSL s_client using ECH
252-
echo "wolfssl" | $OPENSSL s_client \
253-
-tls1_3 \
254-
-connect "localhost:$port" \
255-
-cert "$CERT_DIR/client-cert.pem" \
256-
-key "$CERT_DIR/client-key.pem" \
257-
-CAfile "$CERT_DIR/ca-cert.pem" \
258-
-servername "$PRIV_NAME" \
259-
-ech_config_list "$ech_config" \
260-
$openssl_groups \
261-
&>> "$TMP_LOG"
262-
263-
grep -q "ECH: success: 1" "$TMP_LOG"
279+
if [ "$REJECT" -ne 0 ]; then
280+
# test with OpenSSL s_client using ECH
281+
echo "wolfssl" | $OPENSSL s_client \
282+
-tls1_3 \
283+
-connect "localhost:$port" \
284+
-cert "$CERT_DIR/client-cert.pem" \
285+
-key "$CERT_DIR/client-key.pem" \
286+
-CAfile "$CERT_DIR/ca-cert.pem" \
287+
-servername "$PRIV_NAME" \
288+
-ech_config_list "$ech_config" \
289+
$openssl_groups \
290+
&>> "$TMP_LOG" || true
291+
292+
grep -q "ECH: Got 1 retry-configs" "$TMP_LOG"
293+
else
294+
# test with OpenSSL s_client using ECH
295+
echo "wolfssl" | $OPENSSL s_client \
296+
-tls1_3 \
297+
-connect "localhost:$port" \
298+
-cert "$CERT_DIR/client-cert.pem" \
299+
-key "$CERT_DIR/client-key.pem" \
300+
-CAfile "$CERT_DIR/ca-cert.pem" \
301+
-servername "$PRIV_NAME" \
302+
-ech_config_list "$ech_config" \
303+
$openssl_groups \
304+
&>> "$TMP_LOG"
305+
306+
grep -q "ECH: success: 1" "$TMP_LOG"
307+
fi
264308
}
265309

266310
rm -f "$TMP_LOG"

.github/workflows/openssl-ech.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ jobs:
167167
echo -e "\nTesting weird suite with OpenSSL client and wolfSSL server\n" &>> "$LOG_FILE"
168168
bash ./openssl-ech.sh client --suite "18,1,2" &>> "$LOG_FILE"
169169
170+
echo -e "\nTesting rejection with OpenSSL server and wolfSSL client\n" &>> "$LOG_FILE"
171+
bash ./openssl-ech.sh server --reject &>> "$LOG_FILE"
172+
173+
echo -e "\nTesting rejection with OpenSSL client and wolfSSL server\n" &>> "$LOG_FILE"
174+
bash ./openssl-ech.sh client --reject &>> "$LOG_FILE"
175+
170176
# cleanup
171177
rm -f "$LOG_FILE"
172178

0 commit comments

Comments
 (0)