Skip to content

Commit aa4831f

Browse files
testing improvements (from #10542):
- *_wire_sni test is now more efficient - openssl-ech workflow now does interop with ECH rejection
1 parent f25f4b3 commit aa4831f

3 files changed

Lines changed: 228 additions & 173 deletions

File tree

.github/scripts/openssl-ech.sh

Lines changed: 64 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,12 @@ 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"
8896
PRIV_NAME="ech-private-name.com"
89-
PUB_NAME="ech-public-name.com"
97+
PUB_NAME="example.com"
9098
MAX_WAIT=50
9199

92100
# --------------------------------------------------------------------------
@@ -128,6 +136,8 @@ openssl_server(){
128136

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

133143
# start OpenSSL ECH server with ephemeral port; line-buffer so the
@@ -158,17 +168,29 @@ openssl_server(){
158168
done
159169
echo "parsed port: $port" &>> "$TMP_LOG"
160170

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-
169171
rm -f "$ech_file"
170172

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

174196
# --------------------------------------------------------------------------
@@ -246,21 +268,39 @@ openssl_client(){
246268
exit 1
247269
fi
248270
done
271+
# reject overrides the config the client connects with
272+
[ "$REJECT" -ne 0 ] && ech_config="$REJECT_ECH_CONFIG"
249273
echo "parsed ech config: $ech_config" &>> "$TMP_LOG"
250274

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"
275+
if [ "$REJECT" -ne 0 ]; then
276+
# test with OpenSSL s_client using ECH
277+
echo "wolfssl" | $OPENSSL s_client \
278+
-tls1_3 \
279+
-connect "localhost:$port" \
280+
-cert "$CERT_DIR/client-cert.pem" \
281+
-key "$CERT_DIR/client-key.pem" \
282+
-CAfile "$CERT_DIR/ca-cert.pem" \
283+
-servername "$PRIV_NAME" \
284+
-ech_config_list "$ech_config" \
285+
$openssl_groups \
286+
&>> "$TMP_LOG" || true
287+
288+
grep -q "ECH: Got 1 retry-configs" "$TMP_LOG"
289+
else
290+
# test with OpenSSL s_client using ECH
291+
echo "wolfssl" | $OPENSSL s_client \
292+
-tls1_3 \
293+
-connect "localhost:$port" \
294+
-cert "$CERT_DIR/client-cert.pem" \
295+
-key "$CERT_DIR/client-key.pem" \
296+
-CAfile "$CERT_DIR/ca-cert.pem" \
297+
-servername "$PRIV_NAME" \
298+
-ech_config_list "$ech_config" \
299+
$openssl_groups \
300+
&>> "$TMP_LOG"
301+
302+
grep -q "ECH: success: 1" "$TMP_LOG"
303+
fi
264304
}
265305

266306
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)