1#!/bin/sh 2 3# ssl-opt.sh 4# 5# This file is part of mbed TLS (https://tls.mbed.org) 6# 7# Copyright (c) 2016, ARM Limited, All Rights Reserved 8# 9# Purpose 10# 11# Executes tests to prove various TLS/SSL options and extensions. 12# 13# The goal is not to cover every ciphersuite/version, but instead to cover 14# specific options (max fragment length, truncated hmac, etc) or procedures 15# (session resumption from cache or ticket, renego, etc). 16# 17# The tests assume a build with default options, with exceptions expressed 18# with a dependency. The tests focus on functionality and do not consider 19# performance. 20# 21 22set -u 23 24# default values, can be overriden by the environment 25: ${P_SRV:=../programs/ssl/ssl_server2} 26: ${P_CLI:=../programs/ssl/ssl_client2} 27: ${P_PXY:=../programs/test/udp_proxy} 28: ${OPENSSL_CMD:=openssl} # OPENSSL would conflict with the build system 29: ${GNUTLS_CLI:=gnutls-cli} 30: ${GNUTLS_SERV:=gnutls-serv} 31 32O_SRV="$OPENSSL_CMD s_server -www -cert data_files/server5.crt -key data_files/server5.key" 33O_CLI="echo 'GET / HTTP/1.0' | $OPENSSL_CMD s_client" 34G_SRV="$GNUTLS_SERV --x509certfile data_files/server5.crt --x509keyfile data_files/server5.key" 35G_CLI="echo 'GET / HTTP/1.0' | $GNUTLS_CLI --x509cafile data_files/test-ca_cat12.crt" 36 37TESTS=0 38FAILS=0 39SKIPS=0 40 41CONFIG_H='../include/mbedtls/config.h' 42 43MEMCHECK=0 44FILTER='.*' 45EXCLUDE='^$' 46 47SHOW_TEST_NUMBER=0 48RUN_TEST_NUMBER='' 49 50PRESERVE_LOGS=0 51 52print_usage() { 53 echo "Usage: $0 [options]" 54 printf " -h|--help\tPrint this help.\n" 55 printf " -m|--memcheck\tCheck memory leaks and errors.\n" 56 printf " -f|--filter\tOnly matching tests are executed (default: '$FILTER')\n" 57 printf " -e|--exclude\tMatching tests are excluded (default: '$EXCLUDE')\n" 58 printf " -n|--number\tExecute only numbered test (comma-separated, e.g. '245,256')\n" 59 printf " -s|--show-numbers\tShow test numbers in front of test names\n" 60 printf " -p|--preserve-logs\tPreserve logs of successful tests as well\n" 61 printf " --seed\tInteger seed value to use for this test run\n" 62} 63 64get_options() { 65 while [ $# -gt 0 ]; do 66 case "$1" in 67 -f|--filter) 68 shift; FILTER=$1 69 ;; 70 -e|--exclude) 71 shift; EXCLUDE=$1 72 ;; 73 -m|--memcheck) 74 MEMCHECK=1 75 ;; 76 -n|--number) 77 shift; RUN_TEST_NUMBER=$1 78 ;; 79 -s|--show-numbers) 80 SHOW_TEST_NUMBER=1 81 ;; 82 -p|--preserve-logs) 83 PRESERVE_LOGS=1 84 ;; 85 --seed) 86 shift; SEED="$1" 87 ;; 88 -h|--help) 89 print_usage 90 exit 0 91 ;; 92 *) 93 echo "Unknown argument: '$1'" 94 print_usage 95 exit 1 96 ;; 97 esac 98 shift 99 done 100} 101 102# skip next test if the flag is not enabled in config.h 103requires_config_enabled() { 104 if grep "^#define $1" $CONFIG_H > /dev/null; then :; else 105 SKIP_NEXT="YES" 106 fi 107} 108 109# skip next test if OpenSSL doesn't support FALLBACK_SCSV 110requires_openssl_with_fallback_scsv() { 111 if [ -z "${OPENSSL_HAS_FBSCSV:-}" ]; then 112 if $OPENSSL_CMD s_client -help 2>&1 | grep fallback_scsv >/dev/null 113 then 114 OPENSSL_HAS_FBSCSV="YES" 115 else 116 OPENSSL_HAS_FBSCSV="NO" 117 fi 118 fi 119 if [ "$OPENSSL_HAS_FBSCSV" = "NO" ]; then 120 SKIP_NEXT="YES" 121 fi 122} 123 124# skip next test if GnuTLS isn't available 125requires_gnutls() { 126 if [ -z "${GNUTLS_AVAILABLE:-}" ]; then 127 if ( which "$GNUTLS_CLI" && which "$GNUTLS_SERV" ) >/dev/null 2>&1; then 128 GNUTLS_AVAILABLE="YES" 129 else 130 GNUTLS_AVAILABLE="NO" 131 fi 132 fi 133 if [ "$GNUTLS_AVAILABLE" = "NO" ]; then 134 SKIP_NEXT="YES" 135 fi 136} 137 138# skip next test if IPv6 isn't available on this host 139requires_ipv6() { 140 if [ -z "${HAS_IPV6:-}" ]; then 141 $P_SRV server_addr='::1' > $SRV_OUT 2>&1 & 142 SRV_PID=$! 143 sleep 1 144 kill $SRV_PID >/dev/null 2>&1 145 if grep "NET - Binding of the socket failed" $SRV_OUT >/dev/null; then 146 HAS_IPV6="NO" 147 else 148 HAS_IPV6="YES" 149 fi 150 rm -r $SRV_OUT 151 fi 152 153 if [ "$HAS_IPV6" = "NO" ]; then 154 SKIP_NEXT="YES" 155 fi 156} 157 158# skip the next test if valgrind is in use 159not_with_valgrind() { 160 if [ "$MEMCHECK" -gt 0 ]; then 161 SKIP_NEXT="YES" 162 fi 163} 164 165# skip the next test if valgrind is NOT in use 166only_with_valgrind() { 167 if [ "$MEMCHECK" -eq 0 ]; then 168 SKIP_NEXT="YES" 169 fi 170} 171 172# multiply the client timeout delay by the given factor for the next test 173client_needs_more_time() { 174 CLI_DELAY_FACTOR=$1 175} 176 177# wait for the given seconds after the client finished in the next test 178server_needs_more_time() { 179 SRV_DELAY_SECONDS=$1 180} 181 182# print_name <name> 183print_name() { 184 TESTS=$(( $TESTS + 1 )) 185 LINE="" 186 187 if [ "$SHOW_TEST_NUMBER" -gt 0 ]; then 188 LINE="$TESTS " 189 fi 190 191 LINE="$LINE$1" 192 printf "$LINE " 193 LEN=$(( 72 - `echo "$LINE" | wc -c` )) 194 for i in `seq 1 $LEN`; do printf '.'; done 195 printf ' ' 196 197} 198 199# fail <message> 200fail() { 201 echo "FAIL" 202 echo " ! $1" 203 204 mv $SRV_OUT o-srv-${TESTS}.log 205 mv $CLI_OUT o-cli-${TESTS}.log 206 if [ -n "$PXY_CMD" ]; then 207 mv $PXY_OUT o-pxy-${TESTS}.log 208 fi 209 echo " ! outputs saved to o-XXX-${TESTS}.log" 210 211 if [ "X${USER:-}" = Xbuildbot -o "X${LOGNAME:-}" = Xbuildbot ]; then 212 echo " ! server output:" 213 cat o-srv-${TESTS}.log 214 echo " ! ========================================================" 215 echo " ! client output:" 216 cat o-cli-${TESTS}.log 217 if [ -n "$PXY_CMD" ]; then 218 echo " ! ========================================================" 219 echo " ! proxy output:" 220 cat o-pxy-${TESTS}.log 221 fi 222 echo "" 223 fi 224 225 FAILS=$(( $FAILS + 1 )) 226} 227 228# is_polar <cmd_line> 229is_polar() { 230 echo "$1" | grep 'ssl_server2\|ssl_client2' > /dev/null 231} 232 233# openssl s_server doesn't have -www with DTLS 234check_osrv_dtls() { 235 if echo "$SRV_CMD" | grep 's_server.*-dtls' >/dev/null; then 236 NEEDS_INPUT=1 237 SRV_CMD="$( echo $SRV_CMD | sed s/-www// )" 238 else 239 NEEDS_INPUT=0 240 fi 241} 242 243# provide input to commands that need it 244provide_input() { 245 if [ $NEEDS_INPUT -eq 0 ]; then 246 return 247 fi 248 249 while true; do 250 echo "HTTP/1.0 200 OK" 251 sleep 1 252 done 253} 254 255# has_mem_err <log_file_name> 256has_mem_err() { 257 if ( grep -F 'All heap blocks were freed -- no leaks are possible' "$1" && 258 grep -F 'ERROR SUMMARY: 0 errors from 0 contexts' "$1" ) > /dev/null 259 then 260 return 1 # false: does not have errors 261 else 262 return 0 # true: has errors 263 fi 264} 265 266# wait for server to start: two versions depending on lsof availability 267wait_server_start() { 268 if which lsof >/dev/null 2>&1; then 269 START_TIME=$( date +%s ) 270 DONE=0 271 272 # make a tight loop, server usually takes less than 1 sec to start 273 if [ "$DTLS" -eq 1 ]; then 274 while [ $DONE -eq 0 ]; do 275 if lsof -nbi UDP:"$SRV_PORT" 2>/dev/null | grep UDP >/dev/null 276 then 277 DONE=1 278 elif [ $(( $( date +%s ) - $START_TIME )) -gt $DOG_DELAY ]; then 279 echo "SERVERSTART TIMEOUT" 280 echo "SERVERSTART TIMEOUT" >> $SRV_OUT 281 DONE=1 282 fi 283 done 284 else 285 while [ $DONE -eq 0 ]; do 286 if lsof -nbi TCP:"$SRV_PORT" 2>/dev/null | grep LISTEN >/dev/null 287 then 288 DONE=1 289 elif [ $(( $( date +%s ) - $START_TIME )) -gt $DOG_DELAY ]; then 290 echo "SERVERSTART TIMEOUT" 291 echo "SERVERSTART TIMEOUT" >> $SRV_OUT 292 DONE=1 293 fi 294 done 295 fi 296 else 297 sleep "$START_DELAY" 298 fi 299} 300 301# wait for client to terminate and set CLI_EXIT 302# must be called right after starting the client 303wait_client_done() { 304 CLI_PID=$! 305 306 CLI_DELAY=$(( $DOG_DELAY * $CLI_DELAY_FACTOR )) 307 CLI_DELAY_FACTOR=1 308 309 ( sleep $CLI_DELAY; echo "===CLIENT_TIMEOUT===" >> $CLI_OUT; kill $CLI_PID ) & 310 DOG_PID=$! 311 312 wait $CLI_PID 313 CLI_EXIT=$? 314 315 kill $DOG_PID >/dev/null 2>&1 316 wait $DOG_PID 317 318 echo "EXIT: $CLI_EXIT" >> $CLI_OUT 319 320 sleep $SRV_DELAY_SECONDS 321 SRV_DELAY_SECONDS=0 322} 323 324# check if the given command uses dtls and sets global variable DTLS 325detect_dtls() { 326 if echo "$1" | grep 'dtls=1\|-dtls1\|-u' >/dev/null; then 327 DTLS=1 328 else 329 DTLS=0 330 fi 331} 332 333# Usage: run_test name [-p proxy_cmd] srv_cmd cli_cmd cli_exit [option [...]] 334# Options: -s pattern pattern that must be present in server output 335# -c pattern pattern that must be present in client output 336# -u pattern lines after pattern must be unique in client output 337# -S pattern pattern that must be absent in server output 338# -C pattern pattern that must be absent in client output 339# -U pattern lines after pattern must be unique in server output 340run_test() { 341 NAME="$1" 342 shift 1 343 344 if echo "$NAME" | grep "$FILTER" | grep -v "$EXCLUDE" >/dev/null; then : 345 else 346 SKIP_NEXT="NO" 347 return 348 fi 349 350 print_name "$NAME" 351 352 # Do we only run numbered tests? 353 if [ "X$RUN_TEST_NUMBER" = "X" ]; then : 354 elif echo ",$RUN_TEST_NUMBER," | grep ",$TESTS," >/dev/null; then : 355 else 356 SKIP_NEXT="YES" 357 fi 358 359 # should we skip? 360 if [ "X$SKIP_NEXT" = "XYES" ]; then 361 SKIP_NEXT="NO" 362 echo "SKIP" 363 SKIPS=$(( $SKIPS + 1 )) 364 return 365 fi 366 367 # does this test use a proxy? 368 if [ "X$1" = "X-p" ]; then 369 PXY_CMD="$2" 370 shift 2 371 else 372 PXY_CMD="" 373 fi 374 375 # get commands and client output 376 SRV_CMD="$1" 377 CLI_CMD="$2" 378 CLI_EXPECT="$3" 379 shift 3 380 381 # fix client port 382 if [ -n "$PXY_CMD" ]; then 383 CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$PXY_PORT/g ) 384 else 385 CLI_CMD=$( echo "$CLI_CMD" | sed s/+SRV_PORT/$SRV_PORT/g ) 386 fi 387 388 # update DTLS variable 389 detect_dtls "$SRV_CMD" 390 391 # prepend valgrind to our commands if active 392 if [ "$MEMCHECK" -gt 0 ]; then 393 if is_polar "$SRV_CMD"; then 394 SRV_CMD="valgrind --leak-check=full $SRV_CMD" 395 fi 396 if is_polar "$CLI_CMD"; then 397 CLI_CMD="valgrind --leak-check=full $CLI_CMD" 398 fi 399 fi 400 401 TIMES_LEFT=2 402 while [ $TIMES_LEFT -gt 0 ]; do 403 TIMES_LEFT=$(( $TIMES_LEFT - 1 )) 404 405 # run the commands 406 if [ -n "$PXY_CMD" ]; then 407 echo "$PXY_CMD" > $PXY_OUT 408 $PXY_CMD >> $PXY_OUT 2>&1 & 409 PXY_PID=$! 410 # assume proxy starts faster than server 411 fi 412 413 check_osrv_dtls 414 echo "$SRV_CMD" > $SRV_OUT 415 provide_input | $SRV_CMD >> $SRV_OUT 2>&1 & 416 SRV_PID=$! 417 wait_server_start 418 419 echo "$CLI_CMD" > $CLI_OUT 420 eval "$CLI_CMD" >> $CLI_OUT 2>&1 & 421 wait_client_done 422 423 # terminate the server (and the proxy) 424 kill $SRV_PID 425 wait $SRV_PID 426 if [ -n "$PXY_CMD" ]; then 427 kill $PXY_PID >/dev/null 2>&1 428 wait $PXY_PID 429 fi 430 431 # retry only on timeouts 432 if grep '===CLIENT_TIMEOUT===' $CLI_OUT >/dev/null; then 433 printf "RETRY " 434 else 435 TIMES_LEFT=0 436 fi 437 done 438 439 # check if the client and server went at least to the handshake stage 440 # (useful to avoid tests with only negative assertions and non-zero 441 # expected client exit to incorrectly succeed in case of catastrophic 442 # failure) 443 if is_polar "$SRV_CMD"; then 444 if grep "Performing the SSL/TLS handshake" $SRV_OUT >/dev/null; then :; 445 else 446 fail "server or client failed to reach handshake stage" 447 return 448 fi 449 fi 450 if is_polar "$CLI_CMD"; then 451 if grep "Performing the SSL/TLS handshake" $CLI_OUT >/dev/null; then :; 452 else 453 fail "server or client failed to reach handshake stage" 454 return 455 fi 456 fi 457 458 # check server exit code 459 if [ $? != 0 ]; then 460 fail "server fail" 461 return 462 fi 463 464 # check client exit code 465 if [ \( "$CLI_EXPECT" = 0 -a "$CLI_EXIT" != 0 \) -o \ 466 \( "$CLI_EXPECT" != 0 -a "$CLI_EXIT" = 0 \) ] 467 then 468 fail "bad client exit code (expected $CLI_EXPECT, got $CLI_EXIT)" 469 return 470 fi 471 472 # check other assertions 473 # lines beginning with == are added by valgrind, ignore them 474 # lines with 'Serious error when reading debug info', are valgrind issues as well 475 while [ $# -gt 0 ] 476 do 477 case $1 in 478 "-s") 479 if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else 480 fail "pattern '$2' MUST be present in the Server output" 481 return 482 fi 483 ;; 484 485 "-c") 486 if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then :; else 487 fail "pattern '$2' MUST be present in the Client output" 488 return 489 fi 490 ;; 491 492 "-S") 493 if grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then 494 fail "pattern '$2' MUST NOT be present in the Server output" 495 return 496 fi 497 ;; 498 499 "-C") 500 if grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep "$2" >/dev/null; then 501 fail "pattern '$2' MUST NOT be present in the Client output" 502 return 503 fi 504 ;; 505 506 # The filtering in the following two options (-u and -U) do the following 507 # - ignore valgrind output 508 # - filter out everything but lines right after the pattern occurances 509 # - keep one of each non-unique line 510 # - count how many lines remain 511 # A line with '--' will remain in the result from previous outputs, so the number of lines in the result will be 1 512 # if there were no duplicates. 513 "-U") 514 if [ $(grep -v '^==' $SRV_OUT | grep -v 'Serious error when reading debug info' | grep -A1 "$2" | grep -v "$2" | sort | uniq -d | wc -l) -gt 1 ]; then 515 fail "lines following pattern '$2' must be unique in Server output" 516 return 517 fi 518 ;; 519 520 "-u") 521 if [ $(grep -v '^==' $CLI_OUT | grep -v 'Serious error when reading debug info' | grep -A1 "$2" | grep -v "$2" | sort | uniq -d | wc -l) -gt 1 ]; then 522 fail "lines following pattern '$2' must be unique in Client output" 523 return 524 fi 525 ;; 526 527 *) 528 echo "Unknown test: $1" >&2 529 exit 1 530 esac 531 shift 2 532 done 533 534 # check valgrind's results 535 if [ "$MEMCHECK" -gt 0 ]; then 536 if is_polar "$SRV_CMD" && has_mem_err $SRV_OUT; then 537 fail "Server has memory errors" 538 return 539 fi 540 if is_polar "$CLI_CMD" && has_mem_err $CLI_OUT; then 541 fail "Client has memory errors" 542 return 543 fi 544 fi 545 546 # if we're here, everything is ok 547 echo "PASS" 548 if [ "$PRESERVE_LOGS" -gt 0 ]; then 549 mv $SRV_OUT o-srv-${TESTS}.log 550 mv $CLI_OUT o-cli-${TESTS}.log 551 fi 552 553 rm -f $SRV_OUT $CLI_OUT $PXY_OUT 554} 555 556cleanup() { 557 rm -f $CLI_OUT $SRV_OUT $PXY_OUT $SESSION 558 test -n "${SRV_PID:-}" && kill $SRV_PID >/dev/null 2>&1 559 test -n "${PXY_PID:-}" && kill $PXY_PID >/dev/null 2>&1 560 test -n "${CLI_PID:-}" && kill $CLI_PID >/dev/null 2>&1 561 test -n "${DOG_PID:-}" && kill $DOG_PID >/dev/null 2>&1 562 exit 1 563} 564 565# 566# MAIN 567# 568 569if cd $( dirname $0 ); then :; else 570 echo "cd $( dirname $0 ) failed" >&2 571 exit 1 572fi 573 574get_options "$@" 575 576# sanity checks, avoid an avalanche of errors 577if [ ! -x "$P_SRV" ]; then 578 echo "Command '$P_SRV' is not an executable file" 579 exit 1 580fi 581if [ ! -x "$P_CLI" ]; then 582 echo "Command '$P_CLI' is not an executable file" 583 exit 1 584fi 585if [ ! -x "$P_PXY" ]; then 586 echo "Command '$P_PXY' is not an executable file" 587 exit 1 588fi 589if [ "$MEMCHECK" -gt 0 ]; then 590 if which valgrind >/dev/null 2>&1; then :; else 591 echo "Memcheck not possible. Valgrind not found" 592 exit 1 593 fi 594fi 595if which $OPENSSL_CMD >/dev/null 2>&1; then :; else 596 echo "Command '$OPENSSL_CMD' not found" 597 exit 1 598fi 599 600# used by watchdog 601MAIN_PID="$$" 602 603# be more patient with valgrind 604if [ "$MEMCHECK" -gt 0 ]; then 605 START_DELAY=3 606 DOG_DELAY=30 607else 608 START_DELAY=1 609 DOG_DELAY=10 610fi 611CLI_DELAY_FACTOR=1 612SRV_DELAY_SECONDS=0 613 614# Pick a "unique" server port in the range 10000-19999, and a proxy port 615PORT_BASE="0000$$" 616PORT_BASE="$( printf $PORT_BASE | tail -c 4 )" 617SRV_PORT="1$PORT_BASE" 618PXY_PORT="2$PORT_BASE" 619unset PORT_BASE 620 621# fix commands to use this port, force IPv4 while at it 622# +SRV_PORT will be replaced by either $SRV_PORT or $PXY_PORT later 623P_SRV="$P_SRV server_addr=127.0.0.1 server_port=$SRV_PORT" 624P_CLI="$P_CLI server_addr=127.0.0.1 server_port=+SRV_PORT" 625P_PXY="$P_PXY server_addr=127.0.0.1 server_port=$SRV_PORT listen_addr=127.0.0.1 listen_port=$PXY_PORT ${SEED:+"seed=$SEED"}" 626O_SRV="$O_SRV -accept $SRV_PORT -dhparam data_files/dhparams.pem" 627O_CLI="$O_CLI -connect localhost:+SRV_PORT" 628G_SRV="$G_SRV -p $SRV_PORT" 629G_CLI="$G_CLI -p +SRV_PORT localhost" 630 631# Also pick a unique name for intermediate files 632SRV_OUT="srv_out.$$" 633CLI_OUT="cli_out.$$" 634PXY_OUT="pxy_out.$$" 635SESSION="session.$$" 636 637SKIP_NEXT="NO" 638 639trap cleanup INT TERM HUP 640 641# Basic test 642 643# Checks that: 644# - things work with all ciphersuites active (used with config-full in all.sh) 645# - the expected (highest security) parameters are selected 646# ("signature_algorithm ext: 6" means SHA-512 (highest common hash)) 647run_test "Default" \ 648 "$P_SRV debug_level=3" \ 649 "$P_CLI" \ 650 0 \ 651 -s "Protocol is TLSv1.2" \ 652 -s "Ciphersuite is TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \ 653 -s "client hello v3, signature_algorithm ext: 6" \ 654 -s "ECDHE curve: secp521r1" \ 655 -S "error" \ 656 -C "error" 657 658run_test "Default, DTLS" \ 659 "$P_SRV dtls=1" \ 660 "$P_CLI dtls=1" \ 661 0 \ 662 -s "Protocol is DTLSv1.2" \ 663 -s "Ciphersuite is TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" 664 665# Test for uniqueness of IVs in AEAD ciphersuites 666run_test "Unique IV in GCM" \ 667 "$P_SRV exchanges=20 debug_level=4" \ 668 "$P_CLI exchanges=20 debug_level=4 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \ 669 0 \ 670 -u "IV used" \ 671 -U "IV used" 672 673# Tests for rc4 option 674 675requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITES 676run_test "RC4: server disabled, client enabled" \ 677 "$P_SRV" \ 678 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 679 1 \ 680 -s "SSL - The server has no ciphersuites in common" 681 682requires_config_enabled MBEDTLS_REMOVE_ARC4_CIPHERSUITES 683run_test "RC4: server half, client enabled" \ 684 "$P_SRV arc4=1" \ 685 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 686 1 \ 687 -s "SSL - The server has no ciphersuites in common" 688 689run_test "RC4: server enabled, client disabled" \ 690 "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 691 "$P_CLI" \ 692 1 \ 693 -s "SSL - The server has no ciphersuites in common" 694 695run_test "RC4: both enabled" \ 696 "$P_SRV force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 697 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 698 0 \ 699 -S "SSL - None of the common ciphersuites is usable" \ 700 -S "SSL - The server has no ciphersuites in common" 701 702# Tests for Truncated HMAC extension 703 704run_test "Truncated HMAC: client default, server default" \ 705 "$P_SRV debug_level=4" \ 706 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 707 0 \ 708 -s "dumping 'computed mac' (20 bytes)" \ 709 -S "dumping 'computed mac' (10 bytes)" 710 711run_test "Truncated HMAC: client disabled, server default" \ 712 "$P_SRV debug_level=4" \ 713 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 714 trunc_hmac=0" \ 715 0 \ 716 -s "dumping 'computed mac' (20 bytes)" \ 717 -S "dumping 'computed mac' (10 bytes)" 718 719run_test "Truncated HMAC: client enabled, server default" \ 720 "$P_SRV debug_level=4" \ 721 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 722 trunc_hmac=1" \ 723 0 \ 724 -s "dumping 'computed mac' (20 bytes)" \ 725 -S "dumping 'computed mac' (10 bytes)" 726 727run_test "Truncated HMAC: client enabled, server disabled" \ 728 "$P_SRV debug_level=4 trunc_hmac=0" \ 729 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 730 trunc_hmac=1" \ 731 0 \ 732 -s "dumping 'computed mac' (20 bytes)" \ 733 -S "dumping 'computed mac' (10 bytes)" 734 735run_test "Truncated HMAC: client enabled, server enabled" \ 736 "$P_SRV debug_level=4 trunc_hmac=1" \ 737 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 738 trunc_hmac=1" \ 739 0 \ 740 -S "dumping 'computed mac' (20 bytes)" \ 741 -s "dumping 'computed mac' (10 bytes)" 742 743# Tests for Encrypt-then-MAC extension 744 745run_test "Encrypt then MAC: default" \ 746 "$P_SRV debug_level=3 \ 747 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 748 "$P_CLI debug_level=3" \ 749 0 \ 750 -c "client hello, adding encrypt_then_mac extension" \ 751 -s "found encrypt then mac extension" \ 752 -s "server hello, adding encrypt then mac extension" \ 753 -c "found encrypt_then_mac extension" \ 754 -c "using encrypt then mac" \ 755 -s "using encrypt then mac" 756 757run_test "Encrypt then MAC: client enabled, server disabled" \ 758 "$P_SRV debug_level=3 etm=0 \ 759 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 760 "$P_CLI debug_level=3 etm=1" \ 761 0 \ 762 -c "client hello, adding encrypt_then_mac extension" \ 763 -s "found encrypt then mac extension" \ 764 -S "server hello, adding encrypt then mac extension" \ 765 -C "found encrypt_then_mac extension" \ 766 -C "using encrypt then mac" \ 767 -S "using encrypt then mac" 768 769run_test "Encrypt then MAC: client enabled, aead cipher" \ 770 "$P_SRV debug_level=3 etm=1 \ 771 force_ciphersuite=TLS-RSA-WITH-AES-128-GCM-SHA256" \ 772 "$P_CLI debug_level=3 etm=1" \ 773 0 \ 774 -c "client hello, adding encrypt_then_mac extension" \ 775 -s "found encrypt then mac extension" \ 776 -S "server hello, adding encrypt then mac extension" \ 777 -C "found encrypt_then_mac extension" \ 778 -C "using encrypt then mac" \ 779 -S "using encrypt then mac" 780 781run_test "Encrypt then MAC: client enabled, stream cipher" \ 782 "$P_SRV debug_level=3 etm=1 \ 783 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 784 "$P_CLI debug_level=3 etm=1 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 785 0 \ 786 -c "client hello, adding encrypt_then_mac extension" \ 787 -s "found encrypt then mac extension" \ 788 -S "server hello, adding encrypt then mac extension" \ 789 -C "found encrypt_then_mac extension" \ 790 -C "using encrypt then mac" \ 791 -S "using encrypt then mac" 792 793run_test "Encrypt then MAC: client disabled, server enabled" \ 794 "$P_SRV debug_level=3 etm=1 \ 795 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 796 "$P_CLI debug_level=3 etm=0" \ 797 0 \ 798 -C "client hello, adding encrypt_then_mac extension" \ 799 -S "found encrypt then mac extension" \ 800 -S "server hello, adding encrypt then mac extension" \ 801 -C "found encrypt_then_mac extension" \ 802 -C "using encrypt then mac" \ 803 -S "using encrypt then mac" 804 805requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 806run_test "Encrypt then MAC: client SSLv3, server enabled" \ 807 "$P_SRV debug_level=3 min_version=ssl3 \ 808 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 809 "$P_CLI debug_level=3 force_version=ssl3" \ 810 0 \ 811 -C "client hello, adding encrypt_then_mac extension" \ 812 -S "found encrypt then mac extension" \ 813 -S "server hello, adding encrypt then mac extension" \ 814 -C "found encrypt_then_mac extension" \ 815 -C "using encrypt then mac" \ 816 -S "using encrypt then mac" 817 818requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 819run_test "Encrypt then MAC: client enabled, server SSLv3" \ 820 "$P_SRV debug_level=3 force_version=ssl3 \ 821 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 822 "$P_CLI debug_level=3 min_version=ssl3" \ 823 0 \ 824 -c "client hello, adding encrypt_then_mac extension" \ 825 -S "found encrypt then mac extension" \ 826 -S "server hello, adding encrypt then mac extension" \ 827 -C "found encrypt_then_mac extension" \ 828 -C "using encrypt then mac" \ 829 -S "using encrypt then mac" 830 831# Tests for Extended Master Secret extension 832 833run_test "Extended Master Secret: default" \ 834 "$P_SRV debug_level=3" \ 835 "$P_CLI debug_level=3" \ 836 0 \ 837 -c "client hello, adding extended_master_secret extension" \ 838 -s "found extended master secret extension" \ 839 -s "server hello, adding extended master secret extension" \ 840 -c "found extended_master_secret extension" \ 841 -c "using extended master secret" \ 842 -s "using extended master secret" 843 844run_test "Extended Master Secret: client enabled, server disabled" \ 845 "$P_SRV debug_level=3 extended_ms=0" \ 846 "$P_CLI debug_level=3 extended_ms=1" \ 847 0 \ 848 -c "client hello, adding extended_master_secret extension" \ 849 -s "found extended master secret extension" \ 850 -S "server hello, adding extended master secret extension" \ 851 -C "found extended_master_secret extension" \ 852 -C "using extended master secret" \ 853 -S "using extended master secret" 854 855run_test "Extended Master Secret: client disabled, server enabled" \ 856 "$P_SRV debug_level=3 extended_ms=1" \ 857 "$P_CLI debug_level=3 extended_ms=0" \ 858 0 \ 859 -C "client hello, adding extended_master_secret extension" \ 860 -S "found extended master secret extension" \ 861 -S "server hello, adding extended master secret extension" \ 862 -C "found extended_master_secret extension" \ 863 -C "using extended master secret" \ 864 -S "using extended master secret" 865 866requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 867run_test "Extended Master Secret: client SSLv3, server enabled" \ 868 "$P_SRV debug_level=3 min_version=ssl3" \ 869 "$P_CLI debug_level=3 force_version=ssl3" \ 870 0 \ 871 -C "client hello, adding extended_master_secret extension" \ 872 -S "found extended master secret extension" \ 873 -S "server hello, adding extended master secret extension" \ 874 -C "found extended_master_secret extension" \ 875 -C "using extended master secret" \ 876 -S "using extended master secret" 877 878requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 879run_test "Extended Master Secret: client enabled, server SSLv3" \ 880 "$P_SRV debug_level=3 force_version=ssl3" \ 881 "$P_CLI debug_level=3 min_version=ssl3" \ 882 0 \ 883 -c "client hello, adding extended_master_secret extension" \ 884 -S "found extended master secret extension" \ 885 -S "server hello, adding extended master secret extension" \ 886 -C "found extended_master_secret extension" \ 887 -C "using extended master secret" \ 888 -S "using extended master secret" 889 890# Tests for FALLBACK_SCSV 891 892run_test "Fallback SCSV: default" \ 893 "$P_SRV debug_level=2" \ 894 "$P_CLI debug_level=3 force_version=tls1_1" \ 895 0 \ 896 -C "adding FALLBACK_SCSV" \ 897 -S "received FALLBACK_SCSV" \ 898 -S "inapropriate fallback" \ 899 -C "is a fatal alert message (msg 86)" 900 901run_test "Fallback SCSV: explicitly disabled" \ 902 "$P_SRV debug_level=2" \ 903 "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \ 904 0 \ 905 -C "adding FALLBACK_SCSV" \ 906 -S "received FALLBACK_SCSV" \ 907 -S "inapropriate fallback" \ 908 -C "is a fatal alert message (msg 86)" 909 910run_test "Fallback SCSV: enabled" \ 911 "$P_SRV debug_level=2" \ 912 "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \ 913 1 \ 914 -c "adding FALLBACK_SCSV" \ 915 -s "received FALLBACK_SCSV" \ 916 -s "inapropriate fallback" \ 917 -c "is a fatal alert message (msg 86)" 918 919run_test "Fallback SCSV: enabled, max version" \ 920 "$P_SRV debug_level=2" \ 921 "$P_CLI debug_level=3 fallback=1" \ 922 0 \ 923 -c "adding FALLBACK_SCSV" \ 924 -s "received FALLBACK_SCSV" \ 925 -S "inapropriate fallback" \ 926 -C "is a fatal alert message (msg 86)" 927 928requires_openssl_with_fallback_scsv 929run_test "Fallback SCSV: default, openssl server" \ 930 "$O_SRV" \ 931 "$P_CLI debug_level=3 force_version=tls1_1 fallback=0" \ 932 0 \ 933 -C "adding FALLBACK_SCSV" \ 934 -C "is a fatal alert message (msg 86)" 935 936requires_openssl_with_fallback_scsv 937run_test "Fallback SCSV: enabled, openssl server" \ 938 "$O_SRV" \ 939 "$P_CLI debug_level=3 force_version=tls1_1 fallback=1" \ 940 1 \ 941 -c "adding FALLBACK_SCSV" \ 942 -c "is a fatal alert message (msg 86)" 943 944requires_openssl_with_fallback_scsv 945run_test "Fallback SCSV: disabled, openssl client" \ 946 "$P_SRV debug_level=2" \ 947 "$O_CLI -tls1_1" \ 948 0 \ 949 -S "received FALLBACK_SCSV" \ 950 -S "inapropriate fallback" 951 952requires_openssl_with_fallback_scsv 953run_test "Fallback SCSV: enabled, openssl client" \ 954 "$P_SRV debug_level=2" \ 955 "$O_CLI -tls1_1 -fallback_scsv" \ 956 1 \ 957 -s "received FALLBACK_SCSV" \ 958 -s "inapropriate fallback" 959 960requires_openssl_with_fallback_scsv 961run_test "Fallback SCSV: enabled, max version, openssl client" \ 962 "$P_SRV debug_level=2" \ 963 "$O_CLI -fallback_scsv" \ 964 0 \ 965 -s "received FALLBACK_SCSV" \ 966 -S "inapropriate fallback" 967 968# Tests for CBC 1/n-1 record splitting 969 970run_test "CBC Record splitting: TLS 1.2, no splitting" \ 971 "$P_SRV" \ 972 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 973 request_size=123 force_version=tls1_2" \ 974 0 \ 975 -s "Read from client: 123 bytes read" \ 976 -S "Read from client: 1 bytes read" \ 977 -S "122 bytes read" 978 979run_test "CBC Record splitting: TLS 1.1, no splitting" \ 980 "$P_SRV" \ 981 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 982 request_size=123 force_version=tls1_1" \ 983 0 \ 984 -s "Read from client: 123 bytes read" \ 985 -S "Read from client: 1 bytes read" \ 986 -S "122 bytes read" 987 988run_test "CBC Record splitting: TLS 1.0, splitting" \ 989 "$P_SRV" \ 990 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 991 request_size=123 force_version=tls1" \ 992 0 \ 993 -S "Read from client: 123 bytes read" \ 994 -s "Read from client: 1 bytes read" \ 995 -s "122 bytes read" 996 997requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 998run_test "CBC Record splitting: SSLv3, splitting" \ 999 "$P_SRV min_version=ssl3" \ 1000 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 1001 request_size=123 force_version=ssl3" \ 1002 0 \ 1003 -S "Read from client: 123 bytes read" \ 1004 -s "Read from client: 1 bytes read" \ 1005 -s "122 bytes read" 1006 1007run_test "CBC Record splitting: TLS 1.0 RC4, no splitting" \ 1008 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 1009 "$P_CLI force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 1010 request_size=123 force_version=tls1" \ 1011 0 \ 1012 -s "Read from client: 123 bytes read" \ 1013 -S "Read from client: 1 bytes read" \ 1014 -S "122 bytes read" 1015 1016run_test "CBC Record splitting: TLS 1.0, splitting disabled" \ 1017 "$P_SRV" \ 1018 "$P_CLI force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 1019 request_size=123 force_version=tls1 recsplit=0" \ 1020 0 \ 1021 -s "Read from client: 123 bytes read" \ 1022 -S "Read from client: 1 bytes read" \ 1023 -S "122 bytes read" 1024 1025run_test "CBC Record splitting: TLS 1.0, splitting, nbio" \ 1026 "$P_SRV nbio=2" \ 1027 "$P_CLI nbio=2 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \ 1028 request_size=123 force_version=tls1" \ 1029 0 \ 1030 -S "Read from client: 123 bytes read" \ 1031 -s "Read from client: 1 bytes read" \ 1032 -s "122 bytes read" 1033 1034# Tests for Session Tickets 1035 1036run_test "Session resume using tickets: basic" \ 1037 "$P_SRV debug_level=3 tickets=1" \ 1038 "$P_CLI debug_level=3 tickets=1 reconnect=1" \ 1039 0 \ 1040 -c "client hello, adding session ticket extension" \ 1041 -s "found session ticket extension" \ 1042 -s "server hello, adding session ticket extension" \ 1043 -c "found session_ticket extension" \ 1044 -c "parse new session ticket" \ 1045 -S "session successfully restored from cache" \ 1046 -s "session successfully restored from ticket" \ 1047 -s "a session has been resumed" \ 1048 -c "a session has been resumed" 1049 1050run_test "Session resume using tickets: cache disabled" \ 1051 "$P_SRV debug_level=3 tickets=1 cache_max=0" \ 1052 "$P_CLI debug_level=3 tickets=1 reconnect=1" \ 1053 0 \ 1054 -c "client hello, adding session ticket extension" \ 1055 -s "found session ticket extension" \ 1056 -s "server hello, adding session ticket extension" \ 1057 -c "found session_ticket extension" \ 1058 -c "parse new session ticket" \ 1059 -S "session successfully restored from cache" \ 1060 -s "session successfully restored from ticket" \ 1061 -s "a session has been resumed" \ 1062 -c "a session has been resumed" 1063 1064run_test "Session resume using tickets: timeout" \ 1065 "$P_SRV debug_level=3 tickets=1 cache_max=0 ticket_timeout=1" \ 1066 "$P_CLI debug_level=3 tickets=1 reconnect=1 reco_delay=2" \ 1067 0 \ 1068 -c "client hello, adding session ticket extension" \ 1069 -s "found session ticket extension" \ 1070 -s "server hello, adding session ticket extension" \ 1071 -c "found session_ticket extension" \ 1072 -c "parse new session ticket" \ 1073 -S "session successfully restored from cache" \ 1074 -S "session successfully restored from ticket" \ 1075 -S "a session has been resumed" \ 1076 -C "a session has been resumed" 1077 1078run_test "Session resume using tickets: openssl server" \ 1079 "$O_SRV" \ 1080 "$P_CLI debug_level=3 tickets=1 reconnect=1" \ 1081 0 \ 1082 -c "client hello, adding session ticket extension" \ 1083 -c "found session_ticket extension" \ 1084 -c "parse new session ticket" \ 1085 -c "a session has been resumed" 1086 1087run_test "Session resume using tickets: openssl client" \ 1088 "$P_SRV debug_level=3 tickets=1" \ 1089 "( $O_CLI -sess_out $SESSION; \ 1090 $O_CLI -sess_in $SESSION; \ 1091 rm -f $SESSION )" \ 1092 0 \ 1093 -s "found session ticket extension" \ 1094 -s "server hello, adding session ticket extension" \ 1095 -S "session successfully restored from cache" \ 1096 -s "session successfully restored from ticket" \ 1097 -s "a session has been resumed" 1098 1099# Tests for Session Resume based on session-ID and cache 1100 1101run_test "Session resume using cache: tickets enabled on client" \ 1102 "$P_SRV debug_level=3 tickets=0" \ 1103 "$P_CLI debug_level=3 tickets=1 reconnect=1" \ 1104 0 \ 1105 -c "client hello, adding session ticket extension" \ 1106 -s "found session ticket extension" \ 1107 -S "server hello, adding session ticket extension" \ 1108 -C "found session_ticket extension" \ 1109 -C "parse new session ticket" \ 1110 -s "session successfully restored from cache" \ 1111 -S "session successfully restored from ticket" \ 1112 -s "a session has been resumed" \ 1113 -c "a session has been resumed" 1114 1115run_test "Session resume using cache: tickets enabled on server" \ 1116 "$P_SRV debug_level=3 tickets=1" \ 1117 "$P_CLI debug_level=3 tickets=0 reconnect=1" \ 1118 0 \ 1119 -C "client hello, adding session ticket extension" \ 1120 -S "found session ticket extension" \ 1121 -S "server hello, adding session ticket extension" \ 1122 -C "found session_ticket extension" \ 1123 -C "parse new session ticket" \ 1124 -s "session successfully restored from cache" \ 1125 -S "session successfully restored from ticket" \ 1126 -s "a session has been resumed" \ 1127 -c "a session has been resumed" 1128 1129run_test "Session resume using cache: cache_max=0" \ 1130 "$P_SRV debug_level=3 tickets=0 cache_max=0" \ 1131 "$P_CLI debug_level=3 tickets=0 reconnect=1" \ 1132 0 \ 1133 -S "session successfully restored from cache" \ 1134 -S "session successfully restored from ticket" \ 1135 -S "a session has been resumed" \ 1136 -C "a session has been resumed" 1137 1138run_test "Session resume using cache: cache_max=1" \ 1139 "$P_SRV debug_level=3 tickets=0 cache_max=1" \ 1140 "$P_CLI debug_level=3 tickets=0 reconnect=1" \ 1141 0 \ 1142 -s "session successfully restored from cache" \ 1143 -S "session successfully restored from ticket" \ 1144 -s "a session has been resumed" \ 1145 -c "a session has been resumed" 1146 1147run_test "Session resume using cache: timeout > delay" \ 1148 "$P_SRV debug_level=3 tickets=0" \ 1149 "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=0" \ 1150 0 \ 1151 -s "session successfully restored from cache" \ 1152 -S "session successfully restored from ticket" \ 1153 -s "a session has been resumed" \ 1154 -c "a session has been resumed" 1155 1156run_test "Session resume using cache: timeout < delay" \ 1157 "$P_SRV debug_level=3 tickets=0 cache_timeout=1" \ 1158 "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \ 1159 0 \ 1160 -S "session successfully restored from cache" \ 1161 -S "session successfully restored from ticket" \ 1162 -S "a session has been resumed" \ 1163 -C "a session has been resumed" 1164 1165run_test "Session resume using cache: no timeout" \ 1166 "$P_SRV debug_level=3 tickets=0 cache_timeout=0" \ 1167 "$P_CLI debug_level=3 tickets=0 reconnect=1 reco_delay=2" \ 1168 0 \ 1169 -s "session successfully restored from cache" \ 1170 -S "session successfully restored from ticket" \ 1171 -s "a session has been resumed" \ 1172 -c "a session has been resumed" 1173 1174run_test "Session resume using cache: openssl client" \ 1175 "$P_SRV debug_level=3 tickets=0" \ 1176 "( $O_CLI -sess_out $SESSION; \ 1177 $O_CLI -sess_in $SESSION; \ 1178 rm -f $SESSION )" \ 1179 0 \ 1180 -s "found session ticket extension" \ 1181 -S "server hello, adding session ticket extension" \ 1182 -s "session successfully restored from cache" \ 1183 -S "session successfully restored from ticket" \ 1184 -s "a session has been resumed" 1185 1186run_test "Session resume using cache: openssl server" \ 1187 "$O_SRV" \ 1188 "$P_CLI debug_level=3 tickets=0 reconnect=1" \ 1189 0 \ 1190 -C "found session_ticket extension" \ 1191 -C "parse new session ticket" \ 1192 -c "a session has been resumed" 1193 1194# Tests for Max Fragment Length extension 1195 1196run_test "Max fragment length: not used, reference" \ 1197 "$P_SRV debug_level=3" \ 1198 "$P_CLI debug_level=3" \ 1199 0 \ 1200 -c "Maximum fragment length is 16384" \ 1201 -s "Maximum fragment length is 16384" \ 1202 -C "client hello, adding max_fragment_length extension" \ 1203 -S "found max fragment length extension" \ 1204 -S "server hello, max_fragment_length extension" \ 1205 -C "found max_fragment_length extension" 1206 1207run_test "Max fragment length: used by client" \ 1208 "$P_SRV debug_level=3" \ 1209 "$P_CLI debug_level=3 max_frag_len=4096" \ 1210 0 \ 1211 -c "Maximum fragment length is 4096" \ 1212 -s "Maximum fragment length is 4096" \ 1213 -c "client hello, adding max_fragment_length extension" \ 1214 -s "found max fragment length extension" \ 1215 -s "server hello, max_fragment_length extension" \ 1216 -c "found max_fragment_length extension" 1217 1218run_test "Max fragment length: used by server" \ 1219 "$P_SRV debug_level=3 max_frag_len=4096" \ 1220 "$P_CLI debug_level=3" \ 1221 0 \ 1222 -c "Maximum fragment length is 16384" \ 1223 -s "Maximum fragment length is 4096" \ 1224 -C "client hello, adding max_fragment_length extension" \ 1225 -S "found max fragment length extension" \ 1226 -S "server hello, max_fragment_length extension" \ 1227 -C "found max_fragment_length extension" 1228 1229requires_gnutls 1230run_test "Max fragment length: gnutls server" \ 1231 "$G_SRV" \ 1232 "$P_CLI debug_level=3 max_frag_len=4096" \ 1233 0 \ 1234 -c "Maximum fragment length is 4096" \ 1235 -c "client hello, adding max_fragment_length extension" \ 1236 -c "found max_fragment_length extension" 1237 1238run_test "Max fragment length: client, message just fits" \ 1239 "$P_SRV debug_level=3" \ 1240 "$P_CLI debug_level=3 max_frag_len=2048 request_size=2048" \ 1241 0 \ 1242 -c "Maximum fragment length is 2048" \ 1243 -s "Maximum fragment length is 2048" \ 1244 -c "client hello, adding max_fragment_length extension" \ 1245 -s "found max fragment length extension" \ 1246 -s "server hello, max_fragment_length extension" \ 1247 -c "found max_fragment_length extension" \ 1248 -c "2048 bytes written in 1 fragments" \ 1249 -s "2048 bytes read" 1250 1251run_test "Max fragment length: client, larger message" \ 1252 "$P_SRV debug_level=3" \ 1253 "$P_CLI debug_level=3 max_frag_len=2048 request_size=2345" \ 1254 0 \ 1255 -c "Maximum fragment length is 2048" \ 1256 -s "Maximum fragment length is 2048" \ 1257 -c "client hello, adding max_fragment_length extension" \ 1258 -s "found max fragment length extension" \ 1259 -s "server hello, max_fragment_length extension" \ 1260 -c "found max_fragment_length extension" \ 1261 -c "2345 bytes written in 2 fragments" \ 1262 -s "2048 bytes read" \ 1263 -s "297 bytes read" 1264 1265run_test "Max fragment length: DTLS client, larger message" \ 1266 "$P_SRV debug_level=3 dtls=1" \ 1267 "$P_CLI debug_level=3 dtls=1 max_frag_len=2048 request_size=2345" \ 1268 1 \ 1269 -c "Maximum fragment length is 2048" \ 1270 -s "Maximum fragment length is 2048" \ 1271 -c "client hello, adding max_fragment_length extension" \ 1272 -s "found max fragment length extension" \ 1273 -s "server hello, max_fragment_length extension" \ 1274 -c "found max_fragment_length extension" \ 1275 -c "fragment larger than.*maximum" 1276 1277# Tests for renegotiation 1278 1279run_test "Renegotiation: none, for reference" \ 1280 "$P_SRV debug_level=3 exchanges=2 auth_mode=optional" \ 1281 "$P_CLI debug_level=3 exchanges=2" \ 1282 0 \ 1283 -C "client hello, adding renegotiation extension" \ 1284 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1285 -S "found renegotiation extension" \ 1286 -s "server hello, secure renegotiation extension" \ 1287 -c "found renegotiation extension" \ 1288 -C "=> renegotiate" \ 1289 -S "=> renegotiate" \ 1290 -S "write hello request" 1291 1292run_test "Renegotiation: client-initiated" \ 1293 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional" \ 1294 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \ 1295 0 \ 1296 -c "client hello, adding renegotiation extension" \ 1297 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1298 -s "found renegotiation extension" \ 1299 -s "server hello, secure renegotiation extension" \ 1300 -c "found renegotiation extension" \ 1301 -c "=> renegotiate" \ 1302 -s "=> renegotiate" \ 1303 -S "write hello request" 1304 1305run_test "Renegotiation: server-initiated" \ 1306 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \ 1307 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \ 1308 0 \ 1309 -c "client hello, adding renegotiation extension" \ 1310 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1311 -s "found renegotiation extension" \ 1312 -s "server hello, secure renegotiation extension" \ 1313 -c "found renegotiation extension" \ 1314 -c "=> renegotiate" \ 1315 -s "=> renegotiate" \ 1316 -s "write hello request" 1317 1318run_test "Renegotiation: double" \ 1319 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1" \ 1320 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \ 1321 0 \ 1322 -c "client hello, adding renegotiation extension" \ 1323 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1324 -s "found renegotiation extension" \ 1325 -s "server hello, secure renegotiation extension" \ 1326 -c "found renegotiation extension" \ 1327 -c "=> renegotiate" \ 1328 -s "=> renegotiate" \ 1329 -s "write hello request" 1330 1331run_test "Renegotiation: client-initiated, server-rejected" \ 1332 "$P_SRV debug_level=3 exchanges=2 renegotiation=0 auth_mode=optional" \ 1333 "$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1" \ 1334 1 \ 1335 -c "client hello, adding renegotiation extension" \ 1336 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1337 -S "found renegotiation extension" \ 1338 -s "server hello, secure renegotiation extension" \ 1339 -c "found renegotiation extension" \ 1340 -c "=> renegotiate" \ 1341 -S "=> renegotiate" \ 1342 -S "write hello request" \ 1343 -c "SSL - Unexpected message at ServerHello in renegotiation" \ 1344 -c "failed" 1345 1346run_test "Renegotiation: server-initiated, client-rejected, default" \ 1347 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \ 1348 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \ 1349 0 \ 1350 -C "client hello, adding renegotiation extension" \ 1351 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1352 -S "found renegotiation extension" \ 1353 -s "server hello, secure renegotiation extension" \ 1354 -c "found renegotiation extension" \ 1355 -C "=> renegotiate" \ 1356 -S "=> renegotiate" \ 1357 -s "write hello request" \ 1358 -S "SSL - An unexpected message was received from our peer" \ 1359 -S "failed" 1360 1361run_test "Renegotiation: server-initiated, client-rejected, not enforced" \ 1362 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \ 1363 renego_delay=-1 auth_mode=optional" \ 1364 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \ 1365 0 \ 1366 -C "client hello, adding renegotiation extension" \ 1367 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1368 -S "found renegotiation extension" \ 1369 -s "server hello, secure renegotiation extension" \ 1370 -c "found renegotiation extension" \ 1371 -C "=> renegotiate" \ 1372 -S "=> renegotiate" \ 1373 -s "write hello request" \ 1374 -S "SSL - An unexpected message was received from our peer" \ 1375 -S "failed" 1376 1377# delay 2 for 1 alert record + 1 application data record 1378run_test "Renegotiation: server-initiated, client-rejected, delay 2" \ 1379 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \ 1380 renego_delay=2 auth_mode=optional" \ 1381 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \ 1382 0 \ 1383 -C "client hello, adding renegotiation extension" \ 1384 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1385 -S "found renegotiation extension" \ 1386 -s "server hello, secure renegotiation extension" \ 1387 -c "found renegotiation extension" \ 1388 -C "=> renegotiate" \ 1389 -S "=> renegotiate" \ 1390 -s "write hello request" \ 1391 -S "SSL - An unexpected message was received from our peer" \ 1392 -S "failed" 1393 1394run_test "Renegotiation: server-initiated, client-rejected, delay 0" \ 1395 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \ 1396 renego_delay=0 auth_mode=optional" \ 1397 "$P_CLI debug_level=3 exchanges=2 renegotiation=0" \ 1398 0 \ 1399 -C "client hello, adding renegotiation extension" \ 1400 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1401 -S "found renegotiation extension" \ 1402 -s "server hello, secure renegotiation extension" \ 1403 -c "found renegotiation extension" \ 1404 -C "=> renegotiate" \ 1405 -S "=> renegotiate" \ 1406 -s "write hello request" \ 1407 -s "SSL - An unexpected message was received from our peer" 1408 1409run_test "Renegotiation: server-initiated, client-accepted, delay 0" \ 1410 "$P_SRV debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 \ 1411 renego_delay=0 auth_mode=optional" \ 1412 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \ 1413 0 \ 1414 -c "client hello, adding renegotiation extension" \ 1415 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1416 -s "found renegotiation extension" \ 1417 -s "server hello, secure renegotiation extension" \ 1418 -c "found renegotiation extension" \ 1419 -c "=> renegotiate" \ 1420 -s "=> renegotiate" \ 1421 -s "write hello request" \ 1422 -S "SSL - An unexpected message was received from our peer" \ 1423 -S "failed" 1424 1425run_test "Renegotiation: periodic, just below period" \ 1426 "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \ 1427 "$P_CLI debug_level=3 exchanges=2 renegotiation=1" \ 1428 0 \ 1429 -C "client hello, adding renegotiation extension" \ 1430 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1431 -S "found renegotiation extension" \ 1432 -s "server hello, secure renegotiation extension" \ 1433 -c "found renegotiation extension" \ 1434 -S "record counter limit reached: renegotiate" \ 1435 -C "=> renegotiate" \ 1436 -S "=> renegotiate" \ 1437 -S "write hello request" \ 1438 -S "SSL - An unexpected message was received from our peer" \ 1439 -S "failed" 1440 1441# one extra exchange to be able to complete renego 1442run_test "Renegotiation: periodic, just above period" \ 1443 "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \ 1444 "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \ 1445 0 \ 1446 -c "client hello, adding renegotiation extension" \ 1447 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1448 -s "found renegotiation extension" \ 1449 -s "server hello, secure renegotiation extension" \ 1450 -c "found renegotiation extension" \ 1451 -s "record counter limit reached: renegotiate" \ 1452 -c "=> renegotiate" \ 1453 -s "=> renegotiate" \ 1454 -s "write hello request" \ 1455 -S "SSL - An unexpected message was received from our peer" \ 1456 -S "failed" 1457 1458run_test "Renegotiation: periodic, two times period" \ 1459 "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3 auth_mode=optional" \ 1460 "$P_CLI debug_level=3 exchanges=7 renegotiation=1" \ 1461 0 \ 1462 -c "client hello, adding renegotiation extension" \ 1463 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1464 -s "found renegotiation extension" \ 1465 -s "server hello, secure renegotiation extension" \ 1466 -c "found renegotiation extension" \ 1467 -s "record counter limit reached: renegotiate" \ 1468 -c "=> renegotiate" \ 1469 -s "=> renegotiate" \ 1470 -s "write hello request" \ 1471 -S "SSL - An unexpected message was received from our peer" \ 1472 -S "failed" 1473 1474run_test "Renegotiation: periodic, above period, disabled" \ 1475 "$P_SRV debug_level=3 exchanges=9 renegotiation=0 renego_period=3 auth_mode=optional" \ 1476 "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \ 1477 0 \ 1478 -C "client hello, adding renegotiation extension" \ 1479 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1480 -S "found renegotiation extension" \ 1481 -s "server hello, secure renegotiation extension" \ 1482 -c "found renegotiation extension" \ 1483 -S "record counter limit reached: renegotiate" \ 1484 -C "=> renegotiate" \ 1485 -S "=> renegotiate" \ 1486 -S "write hello request" \ 1487 -S "SSL - An unexpected message was received from our peer" \ 1488 -S "failed" 1489 1490run_test "Renegotiation: nbio, client-initiated" \ 1491 "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 auth_mode=optional" \ 1492 "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1" \ 1493 0 \ 1494 -c "client hello, adding renegotiation extension" \ 1495 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1496 -s "found renegotiation extension" \ 1497 -s "server hello, secure renegotiation extension" \ 1498 -c "found renegotiation extension" \ 1499 -c "=> renegotiate" \ 1500 -s "=> renegotiate" \ 1501 -S "write hello request" 1502 1503run_test "Renegotiation: nbio, server-initiated" \ 1504 "$P_SRV debug_level=3 nbio=2 exchanges=2 renegotiation=1 renegotiate=1 auth_mode=optional" \ 1505 "$P_CLI debug_level=3 nbio=2 exchanges=2 renegotiation=1" \ 1506 0 \ 1507 -c "client hello, adding renegotiation extension" \ 1508 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1509 -s "found renegotiation extension" \ 1510 -s "server hello, secure renegotiation extension" \ 1511 -c "found renegotiation extension" \ 1512 -c "=> renegotiate" \ 1513 -s "=> renegotiate" \ 1514 -s "write hello request" 1515 1516run_test "Renegotiation: openssl server, client-initiated" \ 1517 "$O_SRV -www" \ 1518 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \ 1519 0 \ 1520 -c "client hello, adding renegotiation extension" \ 1521 -c "found renegotiation extension" \ 1522 -c "=> renegotiate" \ 1523 -C "ssl_hanshake() returned" \ 1524 -C "error" \ 1525 -c "HTTP/1.0 200 [Oo][Kk]" 1526 1527requires_gnutls 1528run_test "Renegotiation: gnutls server strict, client-initiated" \ 1529 "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \ 1530 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \ 1531 0 \ 1532 -c "client hello, adding renegotiation extension" \ 1533 -c "found renegotiation extension" \ 1534 -c "=> renegotiate" \ 1535 -C "ssl_hanshake() returned" \ 1536 -C "error" \ 1537 -c "HTTP/1.0 200 [Oo][Kk]" 1538 1539requires_gnutls 1540run_test "Renegotiation: gnutls server unsafe, client-initiated default" \ 1541 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1542 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1" \ 1543 1 \ 1544 -c "client hello, adding renegotiation extension" \ 1545 -C "found renegotiation extension" \ 1546 -c "=> renegotiate" \ 1547 -c "mbedtls_ssl_handshake() returned" \ 1548 -c "error" \ 1549 -C "HTTP/1.0 200 [Oo][Kk]" 1550 1551requires_gnutls 1552run_test "Renegotiation: gnutls server unsafe, client-inititated no legacy" \ 1553 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1554 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \ 1555 allow_legacy=0" \ 1556 1 \ 1557 -c "client hello, adding renegotiation extension" \ 1558 -C "found renegotiation extension" \ 1559 -c "=> renegotiate" \ 1560 -c "mbedtls_ssl_handshake() returned" \ 1561 -c "error" \ 1562 -C "HTTP/1.0 200 [Oo][Kk]" 1563 1564requires_gnutls 1565run_test "Renegotiation: gnutls server unsafe, client-inititated legacy" \ 1566 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1567 "$P_CLI debug_level=3 exchanges=1 renegotiation=1 renegotiate=1 \ 1568 allow_legacy=1" \ 1569 0 \ 1570 -c "client hello, adding renegotiation extension" \ 1571 -C "found renegotiation extension" \ 1572 -c "=> renegotiate" \ 1573 -C "ssl_hanshake() returned" \ 1574 -C "error" \ 1575 -c "HTTP/1.0 200 [Oo][Kk]" 1576 1577run_test "Renegotiation: DTLS, client-initiated" \ 1578 "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1" \ 1579 "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \ 1580 0 \ 1581 -c "client hello, adding renegotiation extension" \ 1582 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1583 -s "found renegotiation extension" \ 1584 -s "server hello, secure renegotiation extension" \ 1585 -c "found renegotiation extension" \ 1586 -c "=> renegotiate" \ 1587 -s "=> renegotiate" \ 1588 -S "write hello request" 1589 1590run_test "Renegotiation: DTLS, server-initiated" \ 1591 "$P_SRV debug_level=3 dtls=1 exchanges=2 renegotiation=1 renegotiate=1" \ 1592 "$P_CLI debug_level=3 dtls=1 exchanges=2 renegotiation=1 \ 1593 read_timeout=1000 max_resend=2" \ 1594 0 \ 1595 -c "client hello, adding renegotiation extension" \ 1596 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \ 1597 -s "found renegotiation extension" \ 1598 -s "server hello, secure renegotiation extension" \ 1599 -c "found renegotiation extension" \ 1600 -c "=> renegotiate" \ 1601 -s "=> renegotiate" \ 1602 -s "write hello request" 1603 1604requires_gnutls 1605run_test "Renegotiation: DTLS, gnutls server, client-initiated" \ 1606 "$G_SRV -u --mtu 4096" \ 1607 "$P_CLI debug_level=3 dtls=1 exchanges=1 renegotiation=1 renegotiate=1" \ 1608 0 \ 1609 -c "client hello, adding renegotiation extension" \ 1610 -c "found renegotiation extension" \ 1611 -c "=> renegotiate" \ 1612 -C "mbedtls_ssl_handshake returned" \ 1613 -C "error" \ 1614 -s "Extra-header:" 1615 1616# Test for the "secure renegotation" extension only (no actual renegotiation) 1617 1618requires_gnutls 1619run_test "Renego ext: gnutls server strict, client default" \ 1620 "$G_SRV --priority=NORMAL:%SAFE_RENEGOTIATION" \ 1621 "$P_CLI debug_level=3" \ 1622 0 \ 1623 -c "found renegotiation extension" \ 1624 -C "error" \ 1625 -c "HTTP/1.0 200 [Oo][Kk]" 1626 1627requires_gnutls 1628run_test "Renego ext: gnutls server unsafe, client default" \ 1629 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1630 "$P_CLI debug_level=3" \ 1631 0 \ 1632 -C "found renegotiation extension" \ 1633 -C "error" \ 1634 -c "HTTP/1.0 200 [Oo][Kk]" 1635 1636requires_gnutls 1637run_test "Renego ext: gnutls server unsafe, client break legacy" \ 1638 "$G_SRV --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1639 "$P_CLI debug_level=3 allow_legacy=-1" \ 1640 1 \ 1641 -C "found renegotiation extension" \ 1642 -c "error" \ 1643 -C "HTTP/1.0 200 [Oo][Kk]" 1644 1645requires_gnutls 1646run_test "Renego ext: gnutls client strict, server default" \ 1647 "$P_SRV debug_level=3" \ 1648 "$G_CLI --priority=NORMAL:%SAFE_RENEGOTIATION" \ 1649 0 \ 1650 -s "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \ 1651 -s "server hello, secure renegotiation extension" 1652 1653requires_gnutls 1654run_test "Renego ext: gnutls client unsafe, server default" \ 1655 "$P_SRV debug_level=3" \ 1656 "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1657 0 \ 1658 -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \ 1659 -S "server hello, secure renegotiation extension" 1660 1661requires_gnutls 1662run_test "Renego ext: gnutls client unsafe, server break legacy" \ 1663 "$P_SRV debug_level=3 allow_legacy=-1" \ 1664 "$G_CLI --priority=NORMAL:%DISABLE_SAFE_RENEGOTIATION" \ 1665 1 \ 1666 -S "received TLS_EMPTY_RENEGOTIATION_INFO\|found renegotiation extension" \ 1667 -S "server hello, secure renegotiation extension" 1668 1669# Tests for silently dropping trailing extra bytes in .der certificates 1670 1671requires_gnutls 1672run_test "DER format: no trailing bytes" \ 1673 "$P_SRV crt_file=data_files/server5-der0.crt \ 1674 key_file=data_files/server5.key" \ 1675 "$G_CLI " \ 1676 0 \ 1677 -c "Handshake was completed" \ 1678 1679requires_gnutls 1680run_test "DER format: with a trailing zero byte" \ 1681 "$P_SRV crt_file=data_files/server5-der1a.crt \ 1682 key_file=data_files/server5.key" \ 1683 "$G_CLI " \ 1684 0 \ 1685 -c "Handshake was completed" \ 1686 1687requires_gnutls 1688run_test "DER format: with a trailing random byte" \ 1689 "$P_SRV crt_file=data_files/server5-der1b.crt \ 1690 key_file=data_files/server5.key" \ 1691 "$G_CLI " \ 1692 0 \ 1693 -c "Handshake was completed" \ 1694 1695requires_gnutls 1696run_test "DER format: with 2 trailing random bytes" \ 1697 "$P_SRV crt_file=data_files/server5-der2.crt \ 1698 key_file=data_files/server5.key" \ 1699 "$G_CLI " \ 1700 0 \ 1701 -c "Handshake was completed" \ 1702 1703requires_gnutls 1704run_test "DER format: with 4 trailing random bytes" \ 1705 "$P_SRV crt_file=data_files/server5-der4.crt \ 1706 key_file=data_files/server5.key" \ 1707 "$G_CLI " \ 1708 0 \ 1709 -c "Handshake was completed" \ 1710 1711requires_gnutls 1712run_test "DER format: with 8 trailing random bytes" \ 1713 "$P_SRV crt_file=data_files/server5-der8.crt \ 1714 key_file=data_files/server5.key" \ 1715 "$G_CLI " \ 1716 0 \ 1717 -c "Handshake was completed" \ 1718 1719requires_gnutls 1720run_test "DER format: with 9 trailing random bytes" \ 1721 "$P_SRV crt_file=data_files/server5-der9.crt \ 1722 key_file=data_files/server5.key" \ 1723 "$G_CLI " \ 1724 0 \ 1725 -c "Handshake was completed" \ 1726 1727# Tests for auth_mode 1728 1729run_test "Authentication: server badcert, client required" \ 1730 "$P_SRV crt_file=data_files/server5-badsign.crt \ 1731 key_file=data_files/server5.key" \ 1732 "$P_CLI debug_level=1 auth_mode=required" \ 1733 1 \ 1734 -c "x509_verify_cert() returned" \ 1735 -c "! The certificate is not correctly signed by the trusted CA" \ 1736 -c "! mbedtls_ssl_handshake returned" \ 1737 -c "X509 - Certificate verification failed" 1738 1739run_test "Authentication: server badcert, client optional" \ 1740 "$P_SRV crt_file=data_files/server5-badsign.crt \ 1741 key_file=data_files/server5.key" \ 1742 "$P_CLI debug_level=1 auth_mode=optional" \ 1743 0 \ 1744 -c "x509_verify_cert() returned" \ 1745 -c "! The certificate is not correctly signed by the trusted CA" \ 1746 -C "! mbedtls_ssl_handshake returned" \ 1747 -C "X509 - Certificate verification failed" 1748 1749run_test "Authentication: server badcert, client none" \ 1750 "$P_SRV crt_file=data_files/server5-badsign.crt \ 1751 key_file=data_files/server5.key" \ 1752 "$P_CLI debug_level=1 auth_mode=none" \ 1753 0 \ 1754 -C "x509_verify_cert() returned" \ 1755 -C "! The certificate is not correctly signed by the trusted CA" \ 1756 -C "! mbedtls_ssl_handshake returned" \ 1757 -C "X509 - Certificate verification failed" 1758 1759run_test "Authentication: client SHA256, server required" \ 1760 "$P_SRV auth_mode=required" \ 1761 "$P_CLI debug_level=3 crt_file=data_files/server6.crt \ 1762 key_file=data_files/server6.key \ 1763 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" \ 1764 0 \ 1765 -c "Supported Signature Algorithm found: 4," \ 1766 -c "Supported Signature Algorithm found: 5," 1767 1768run_test "Authentication: client SHA384, server required" \ 1769 "$P_SRV auth_mode=required" \ 1770 "$P_CLI debug_level=3 crt_file=data_files/server6.crt \ 1771 key_file=data_files/server6.key \ 1772 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256" \ 1773 0 \ 1774 -c "Supported Signature Algorithm found: 4," \ 1775 -c "Supported Signature Algorithm found: 5," 1776 1777run_test "Authentication: client badcert, server required" \ 1778 "$P_SRV debug_level=3 auth_mode=required" \ 1779 "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \ 1780 key_file=data_files/server5.key" \ 1781 1 \ 1782 -S "skip write certificate request" \ 1783 -C "skip parse certificate request" \ 1784 -c "got a certificate request" \ 1785 -C "skip write certificate" \ 1786 -C "skip write certificate verify" \ 1787 -S "skip parse certificate verify" \ 1788 -s "x509_verify_cert() returned" \ 1789 -s "! The certificate is not correctly signed by the trusted CA" \ 1790 -s "! mbedtls_ssl_handshake returned" \ 1791 -c "! mbedtls_ssl_handshake returned" \ 1792 -s "X509 - Certificate verification failed" 1793 1794run_test "Authentication: client badcert, server optional" \ 1795 "$P_SRV debug_level=3 auth_mode=optional" \ 1796 "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \ 1797 key_file=data_files/server5.key" \ 1798 0 \ 1799 -S "skip write certificate request" \ 1800 -C "skip parse certificate request" \ 1801 -c "got a certificate request" \ 1802 -C "skip write certificate" \ 1803 -C "skip write certificate verify" \ 1804 -S "skip parse certificate verify" \ 1805 -s "x509_verify_cert() returned" \ 1806 -s "! The certificate is not correctly signed by the trusted CA" \ 1807 -S "! mbedtls_ssl_handshake returned" \ 1808 -C "! mbedtls_ssl_handshake returned" \ 1809 -S "X509 - Certificate verification failed" 1810 1811run_test "Authentication: client badcert, server none" \ 1812 "$P_SRV debug_level=3 auth_mode=none" \ 1813 "$P_CLI debug_level=3 crt_file=data_files/server5-badsign.crt \ 1814 key_file=data_files/server5.key" \ 1815 0 \ 1816 -s "skip write certificate request" \ 1817 -C "skip parse certificate request" \ 1818 -c "got no certificate request" \ 1819 -c "skip write certificate" \ 1820 -c "skip write certificate verify" \ 1821 -s "skip parse certificate verify" \ 1822 -S "x509_verify_cert() returned" \ 1823 -S "! The certificate is not correctly signed by the trusted CA" \ 1824 -S "! mbedtls_ssl_handshake returned" \ 1825 -C "! mbedtls_ssl_handshake returned" \ 1826 -S "X509 - Certificate verification failed" 1827 1828run_test "Authentication: client no cert, server optional" \ 1829 "$P_SRV debug_level=3 auth_mode=optional" \ 1830 "$P_CLI debug_level=3 crt_file=none key_file=none" \ 1831 0 \ 1832 -S "skip write certificate request" \ 1833 -C "skip parse certificate request" \ 1834 -c "got a certificate request" \ 1835 -C "skip write certificate$" \ 1836 -C "got no certificate to send" \ 1837 -S "SSLv3 client has no certificate" \ 1838 -c "skip write certificate verify" \ 1839 -s "skip parse certificate verify" \ 1840 -s "! Certificate was missing" \ 1841 -S "! mbedtls_ssl_handshake returned" \ 1842 -C "! mbedtls_ssl_handshake returned" \ 1843 -S "X509 - Certificate verification failed" 1844 1845run_test "Authentication: openssl client no cert, server optional" \ 1846 "$P_SRV debug_level=3 auth_mode=optional" \ 1847 "$O_CLI" \ 1848 0 \ 1849 -S "skip write certificate request" \ 1850 -s "skip parse certificate verify" \ 1851 -s "! Certificate was missing" \ 1852 -S "! mbedtls_ssl_handshake returned" \ 1853 -S "X509 - Certificate verification failed" 1854 1855run_test "Authentication: client no cert, openssl server optional" \ 1856 "$O_SRV -verify 10" \ 1857 "$P_CLI debug_level=3 crt_file=none key_file=none" \ 1858 0 \ 1859 -C "skip parse certificate request" \ 1860 -c "got a certificate request" \ 1861 -C "skip write certificate$" \ 1862 -c "skip write certificate verify" \ 1863 -C "! mbedtls_ssl_handshake returned" 1864 1865requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 1866run_test "Authentication: client no cert, ssl3" \ 1867 "$P_SRV debug_level=3 auth_mode=optional force_version=ssl3" \ 1868 "$P_CLI debug_level=3 crt_file=none key_file=none min_version=ssl3" \ 1869 0 \ 1870 -S "skip write certificate request" \ 1871 -C "skip parse certificate request" \ 1872 -c "got a certificate request" \ 1873 -C "skip write certificate$" \ 1874 -c "skip write certificate verify" \ 1875 -c "got no certificate to send" \ 1876 -s "SSLv3 client has no certificate" \ 1877 -s "skip parse certificate verify" \ 1878 -s "! Certificate was missing" \ 1879 -S "! mbedtls_ssl_handshake returned" \ 1880 -C "! mbedtls_ssl_handshake returned" \ 1881 -S "X509 - Certificate verification failed" 1882 1883# Tests for certificate selection based on SHA verson 1884 1885run_test "Certificate hash: client TLS 1.2 -> SHA-2" \ 1886 "$P_SRV crt_file=data_files/server5.crt \ 1887 key_file=data_files/server5.key \ 1888 crt_file2=data_files/server5-sha1.crt \ 1889 key_file2=data_files/server5.key" \ 1890 "$P_CLI force_version=tls1_2" \ 1891 0 \ 1892 -c "signed using.*ECDSA with SHA256" \ 1893 -C "signed using.*ECDSA with SHA1" 1894 1895run_test "Certificate hash: client TLS 1.1 -> SHA-1" \ 1896 "$P_SRV crt_file=data_files/server5.crt \ 1897 key_file=data_files/server5.key \ 1898 crt_file2=data_files/server5-sha1.crt \ 1899 key_file2=data_files/server5.key" \ 1900 "$P_CLI force_version=tls1_1" \ 1901 0 \ 1902 -C "signed using.*ECDSA with SHA256" \ 1903 -c "signed using.*ECDSA with SHA1" 1904 1905run_test "Certificate hash: client TLS 1.0 -> SHA-1" \ 1906 "$P_SRV crt_file=data_files/server5.crt \ 1907 key_file=data_files/server5.key \ 1908 crt_file2=data_files/server5-sha1.crt \ 1909 key_file2=data_files/server5.key" \ 1910 "$P_CLI force_version=tls1" \ 1911 0 \ 1912 -C "signed using.*ECDSA with SHA256" \ 1913 -c "signed using.*ECDSA with SHA1" 1914 1915run_test "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 1)" \ 1916 "$P_SRV crt_file=data_files/server5.crt \ 1917 key_file=data_files/server5.key \ 1918 crt_file2=data_files/server6.crt \ 1919 key_file2=data_files/server6.key" \ 1920 "$P_CLI force_version=tls1_1" \ 1921 0 \ 1922 -c "serial number.*09" \ 1923 -c "signed using.*ECDSA with SHA256" \ 1924 -C "signed using.*ECDSA with SHA1" 1925 1926run_test "Certificate hash: client TLS 1.1, no SHA-1 -> SHA-2 (order 2)" \ 1927 "$P_SRV crt_file=data_files/server6.crt \ 1928 key_file=data_files/server6.key \ 1929 crt_file2=data_files/server5.crt \ 1930 key_file2=data_files/server5.key" \ 1931 "$P_CLI force_version=tls1_1" \ 1932 0 \ 1933 -c "serial number.*0A" \ 1934 -c "signed using.*ECDSA with SHA256" \ 1935 -C "signed using.*ECDSA with SHA1" 1936 1937# tests for SNI 1938 1939run_test "SNI: no SNI callback" \ 1940 "$P_SRV debug_level=3 \ 1941 crt_file=data_files/server5.crt key_file=data_files/server5.key" \ 1942 "$P_CLI server_name=localhost" \ 1943 0 \ 1944 -S "parse ServerName extension" \ 1945 -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \ 1946 -c "subject name *: C=NL, O=PolarSSL, CN=localhost" 1947 1948run_test "SNI: matching cert 1" \ 1949 "$P_SRV debug_level=3 \ 1950 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 1951 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \ 1952 "$P_CLI server_name=localhost" \ 1953 0 \ 1954 -s "parse ServerName extension" \ 1955 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \ 1956 -c "subject name *: C=NL, O=PolarSSL, CN=localhost" 1957 1958run_test "SNI: matching cert 2" \ 1959 "$P_SRV debug_level=3 \ 1960 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 1961 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \ 1962 "$P_CLI server_name=polarssl.example" \ 1963 0 \ 1964 -s "parse ServerName extension" \ 1965 -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \ 1966 -c "subject name *: C=NL, O=PolarSSL, CN=polarssl.example" 1967 1968run_test "SNI: no matching cert" \ 1969 "$P_SRV debug_level=3 \ 1970 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 1971 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-,polarssl.example,data_files/server1-nospace.crt,data_files/server1.key,-,-,-" \ 1972 "$P_CLI server_name=nonesuch.example" \ 1973 1 \ 1974 -s "parse ServerName extension" \ 1975 -s "ssl_sni_wrapper() returned" \ 1976 -s "mbedtls_ssl_handshake returned" \ 1977 -c "mbedtls_ssl_handshake returned" \ 1978 -c "SSL - A fatal alert message was received from our peer" 1979 1980run_test "SNI: client auth no override: optional" \ 1981 "$P_SRV debug_level=3 auth_mode=optional \ 1982 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 1983 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,-" \ 1984 "$P_CLI debug_level=3 server_name=localhost" \ 1985 0 \ 1986 -S "skip write certificate request" \ 1987 -C "skip parse certificate request" \ 1988 -c "got a certificate request" \ 1989 -C "skip write certificate" \ 1990 -C "skip write certificate verify" \ 1991 -S "skip parse certificate verify" 1992 1993run_test "SNI: client auth override: none -> optional" \ 1994 "$P_SRV debug_level=3 auth_mode=none \ 1995 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 1996 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,optional" \ 1997 "$P_CLI debug_level=3 server_name=localhost" \ 1998 0 \ 1999 -S "skip write certificate request" \ 2000 -C "skip parse certificate request" \ 2001 -c "got a certificate request" \ 2002 -C "skip write certificate" \ 2003 -C "skip write certificate verify" \ 2004 -S "skip parse certificate verify" 2005 2006run_test "SNI: client auth override: optional -> none" \ 2007 "$P_SRV debug_level=3 auth_mode=optional \ 2008 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 2009 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,none" \ 2010 "$P_CLI debug_level=3 server_name=localhost" \ 2011 0 \ 2012 -s "skip write certificate request" \ 2013 -C "skip parse certificate request" \ 2014 -c "got no certificate request" \ 2015 -c "skip write certificate" \ 2016 -c "skip write certificate verify" \ 2017 -s "skip parse certificate verify" 2018 2019run_test "SNI: CA no override" \ 2020 "$P_SRV debug_level=3 auth_mode=optional \ 2021 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 2022 ca_file=data_files/test-ca.crt \ 2023 sni=localhost,data_files/server2.crt,data_files/server2.key,-,-,required" \ 2024 "$P_CLI debug_level=3 server_name=localhost \ 2025 crt_file=data_files/server6.crt key_file=data_files/server6.key" \ 2026 1 \ 2027 -S "skip write certificate request" \ 2028 -C "skip parse certificate request" \ 2029 -c "got a certificate request" \ 2030 -C "skip write certificate" \ 2031 -C "skip write certificate verify" \ 2032 -S "skip parse certificate verify" \ 2033 -s "x509_verify_cert() returned" \ 2034 -s "! The certificate is not correctly signed by the trusted CA" \ 2035 -S "The certificate has been revoked (is on a CRL)" 2036 2037run_test "SNI: CA override" \ 2038 "$P_SRV debug_level=3 auth_mode=optional \ 2039 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 2040 ca_file=data_files/test-ca.crt \ 2041 sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,-,required" \ 2042 "$P_CLI debug_level=3 server_name=localhost \ 2043 crt_file=data_files/server6.crt key_file=data_files/server6.key" \ 2044 0 \ 2045 -S "skip write certificate request" \ 2046 -C "skip parse certificate request" \ 2047 -c "got a certificate request" \ 2048 -C "skip write certificate" \ 2049 -C "skip write certificate verify" \ 2050 -S "skip parse certificate verify" \ 2051 -S "x509_verify_cert() returned" \ 2052 -S "! The certificate is not correctly signed by the trusted CA" \ 2053 -S "The certificate has been revoked (is on a CRL)" 2054 2055run_test "SNI: CA override with CRL" \ 2056 "$P_SRV debug_level=3 auth_mode=optional \ 2057 crt_file=data_files/server5.crt key_file=data_files/server5.key \ 2058 ca_file=data_files/test-ca.crt \ 2059 sni=localhost,data_files/server2.crt,data_files/server2.key,data_files/test-ca2.crt,data_files/crl-ec-sha256.pem,required" \ 2060 "$P_CLI debug_level=3 server_name=localhost \ 2061 crt_file=data_files/server6.crt key_file=data_files/server6.key" \ 2062 1 \ 2063 -S "skip write certificate request" \ 2064 -C "skip parse certificate request" \ 2065 -c "got a certificate request" \ 2066 -C "skip write certificate" \ 2067 -C "skip write certificate verify" \ 2068 -S "skip parse certificate verify" \ 2069 -s "x509_verify_cert() returned" \ 2070 -S "! The certificate is not correctly signed by the trusted CA" \ 2071 -s "The certificate has been revoked (is on a CRL)" 2072 2073# Tests for non-blocking I/O: exercise a variety of handshake flows 2074 2075run_test "Non-blocking I/O: basic handshake" \ 2076 "$P_SRV nbio=2 tickets=0 auth_mode=none" \ 2077 "$P_CLI nbio=2 tickets=0" \ 2078 0 \ 2079 -S "mbedtls_ssl_handshake returned" \ 2080 -C "mbedtls_ssl_handshake returned" \ 2081 -c "Read from server: .* bytes read" 2082 2083run_test "Non-blocking I/O: client auth" \ 2084 "$P_SRV nbio=2 tickets=0 auth_mode=required" \ 2085 "$P_CLI nbio=2 tickets=0" \ 2086 0 \ 2087 -S "mbedtls_ssl_handshake returned" \ 2088 -C "mbedtls_ssl_handshake returned" \ 2089 -c "Read from server: .* bytes read" 2090 2091run_test "Non-blocking I/O: ticket" \ 2092 "$P_SRV nbio=2 tickets=1 auth_mode=none" \ 2093 "$P_CLI nbio=2 tickets=1" \ 2094 0 \ 2095 -S "mbedtls_ssl_handshake returned" \ 2096 -C "mbedtls_ssl_handshake returned" \ 2097 -c "Read from server: .* bytes read" 2098 2099run_test "Non-blocking I/O: ticket + client auth" \ 2100 "$P_SRV nbio=2 tickets=1 auth_mode=required" \ 2101 "$P_CLI nbio=2 tickets=1" \ 2102 0 \ 2103 -S "mbedtls_ssl_handshake returned" \ 2104 -C "mbedtls_ssl_handshake returned" \ 2105 -c "Read from server: .* bytes read" 2106 2107run_test "Non-blocking I/O: ticket + client auth + resume" \ 2108 "$P_SRV nbio=2 tickets=1 auth_mode=required" \ 2109 "$P_CLI nbio=2 tickets=1 reconnect=1" \ 2110 0 \ 2111 -S "mbedtls_ssl_handshake returned" \ 2112 -C "mbedtls_ssl_handshake returned" \ 2113 -c "Read from server: .* bytes read" 2114 2115run_test "Non-blocking I/O: ticket + resume" \ 2116 "$P_SRV nbio=2 tickets=1 auth_mode=none" \ 2117 "$P_CLI nbio=2 tickets=1 reconnect=1" \ 2118 0 \ 2119 -S "mbedtls_ssl_handshake returned" \ 2120 -C "mbedtls_ssl_handshake returned" \ 2121 -c "Read from server: .* bytes read" 2122 2123run_test "Non-blocking I/O: session-id resume" \ 2124 "$P_SRV nbio=2 tickets=0 auth_mode=none" \ 2125 "$P_CLI nbio=2 tickets=0 reconnect=1" \ 2126 0 \ 2127 -S "mbedtls_ssl_handshake returned" \ 2128 -C "mbedtls_ssl_handshake returned" \ 2129 -c "Read from server: .* bytes read" 2130 2131# Tests for version negotiation 2132 2133run_test "Version check: all -> 1.2" \ 2134 "$P_SRV" \ 2135 "$P_CLI" \ 2136 0 \ 2137 -S "mbedtls_ssl_handshake returned" \ 2138 -C "mbedtls_ssl_handshake returned" \ 2139 -s "Protocol is TLSv1.2" \ 2140 -c "Protocol is TLSv1.2" 2141 2142run_test "Version check: cli max 1.1 -> 1.1" \ 2143 "$P_SRV" \ 2144 "$P_CLI max_version=tls1_1" \ 2145 0 \ 2146 -S "mbedtls_ssl_handshake returned" \ 2147 -C "mbedtls_ssl_handshake returned" \ 2148 -s "Protocol is TLSv1.1" \ 2149 -c "Protocol is TLSv1.1" 2150 2151run_test "Version check: srv max 1.1 -> 1.1" \ 2152 "$P_SRV max_version=tls1_1" \ 2153 "$P_CLI" \ 2154 0 \ 2155 -S "mbedtls_ssl_handshake returned" \ 2156 -C "mbedtls_ssl_handshake returned" \ 2157 -s "Protocol is TLSv1.1" \ 2158 -c "Protocol is TLSv1.1" 2159 2160run_test "Version check: cli+srv max 1.1 -> 1.1" \ 2161 "$P_SRV max_version=tls1_1" \ 2162 "$P_CLI max_version=tls1_1" \ 2163 0 \ 2164 -S "mbedtls_ssl_handshake returned" \ 2165 -C "mbedtls_ssl_handshake returned" \ 2166 -s "Protocol is TLSv1.1" \ 2167 -c "Protocol is TLSv1.1" 2168 2169run_test "Version check: cli max 1.1, srv min 1.1 -> 1.1" \ 2170 "$P_SRV min_version=tls1_1" \ 2171 "$P_CLI max_version=tls1_1" \ 2172 0 \ 2173 -S "mbedtls_ssl_handshake returned" \ 2174 -C "mbedtls_ssl_handshake returned" \ 2175 -s "Protocol is TLSv1.1" \ 2176 -c "Protocol is TLSv1.1" 2177 2178run_test "Version check: cli min 1.1, srv max 1.1 -> 1.1" \ 2179 "$P_SRV max_version=tls1_1" \ 2180 "$P_CLI min_version=tls1_1" \ 2181 0 \ 2182 -S "mbedtls_ssl_handshake returned" \ 2183 -C "mbedtls_ssl_handshake returned" \ 2184 -s "Protocol is TLSv1.1" \ 2185 -c "Protocol is TLSv1.1" 2186 2187run_test "Version check: cli min 1.2, srv max 1.1 -> fail" \ 2188 "$P_SRV max_version=tls1_1" \ 2189 "$P_CLI min_version=tls1_2" \ 2190 1 \ 2191 -s "mbedtls_ssl_handshake returned" \ 2192 -c "mbedtls_ssl_handshake returned" \ 2193 -c "SSL - Handshake protocol not within min/max boundaries" 2194 2195run_test "Version check: srv min 1.2, cli max 1.1 -> fail" \ 2196 "$P_SRV min_version=tls1_2" \ 2197 "$P_CLI max_version=tls1_1" \ 2198 1 \ 2199 -s "mbedtls_ssl_handshake returned" \ 2200 -c "mbedtls_ssl_handshake returned" \ 2201 -s "SSL - Handshake protocol not within min/max boundaries" 2202 2203# Tests for ALPN extension 2204 2205run_test "ALPN: none" \ 2206 "$P_SRV debug_level=3" \ 2207 "$P_CLI debug_level=3" \ 2208 0 \ 2209 -C "client hello, adding alpn extension" \ 2210 -S "found alpn extension" \ 2211 -C "got an alert message, type: \\[2:120]" \ 2212 -S "server hello, adding alpn extension" \ 2213 -C "found alpn extension " \ 2214 -C "Application Layer Protocol is" \ 2215 -S "Application Layer Protocol is" 2216 2217run_test "ALPN: client only" \ 2218 "$P_SRV debug_level=3" \ 2219 "$P_CLI debug_level=3 alpn=abc,1234" \ 2220 0 \ 2221 -c "client hello, adding alpn extension" \ 2222 -s "found alpn extension" \ 2223 -C "got an alert message, type: \\[2:120]" \ 2224 -S "server hello, adding alpn extension" \ 2225 -C "found alpn extension " \ 2226 -c "Application Layer Protocol is (none)" \ 2227 -S "Application Layer Protocol is" 2228 2229run_test "ALPN: server only" \ 2230 "$P_SRV debug_level=3 alpn=abc,1234" \ 2231 "$P_CLI debug_level=3" \ 2232 0 \ 2233 -C "client hello, adding alpn extension" \ 2234 -S "found alpn extension" \ 2235 -C "got an alert message, type: \\[2:120]" \ 2236 -S "server hello, adding alpn extension" \ 2237 -C "found alpn extension " \ 2238 -C "Application Layer Protocol is" \ 2239 -s "Application Layer Protocol is (none)" 2240 2241run_test "ALPN: both, common cli1-srv1" \ 2242 "$P_SRV debug_level=3 alpn=abc,1234" \ 2243 "$P_CLI debug_level=3 alpn=abc,1234" \ 2244 0 \ 2245 -c "client hello, adding alpn extension" \ 2246 -s "found alpn extension" \ 2247 -C "got an alert message, type: \\[2:120]" \ 2248 -s "server hello, adding alpn extension" \ 2249 -c "found alpn extension" \ 2250 -c "Application Layer Protocol is abc" \ 2251 -s "Application Layer Protocol is abc" 2252 2253run_test "ALPN: both, common cli2-srv1" \ 2254 "$P_SRV debug_level=3 alpn=abc,1234" \ 2255 "$P_CLI debug_level=3 alpn=1234,abc" \ 2256 0 \ 2257 -c "client hello, adding alpn extension" \ 2258 -s "found alpn extension" \ 2259 -C "got an alert message, type: \\[2:120]" \ 2260 -s "server hello, adding alpn extension" \ 2261 -c "found alpn extension" \ 2262 -c "Application Layer Protocol is abc" \ 2263 -s "Application Layer Protocol is abc" 2264 2265run_test "ALPN: both, common cli1-srv2" \ 2266 "$P_SRV debug_level=3 alpn=abc,1234" \ 2267 "$P_CLI debug_level=3 alpn=1234,abcde" \ 2268 0 \ 2269 -c "client hello, adding alpn extension" \ 2270 -s "found alpn extension" \ 2271 -C "got an alert message, type: \\[2:120]" \ 2272 -s "server hello, adding alpn extension" \ 2273 -c "found alpn extension" \ 2274 -c "Application Layer Protocol is 1234" \ 2275 -s "Application Layer Protocol is 1234" 2276 2277run_test "ALPN: both, no common" \ 2278 "$P_SRV debug_level=3 alpn=abc,123" \ 2279 "$P_CLI debug_level=3 alpn=1234,abcde" \ 2280 1 \ 2281 -c "client hello, adding alpn extension" \ 2282 -s "found alpn extension" \ 2283 -c "got an alert message, type: \\[2:120]" \ 2284 -S "server hello, adding alpn extension" \ 2285 -C "found alpn extension" \ 2286 -C "Application Layer Protocol is 1234" \ 2287 -S "Application Layer Protocol is 1234" 2288 2289 2290# Tests for keyUsage in leaf certificates, part 1: 2291# server-side certificate/suite selection 2292 2293run_test "keyUsage srv: RSA, digitalSignature -> (EC)DHE-RSA" \ 2294 "$P_SRV key_file=data_files/server2.key \ 2295 crt_file=data_files/server2.ku-ds.crt" \ 2296 "$P_CLI" \ 2297 0 \ 2298 -c "Ciphersuite is TLS-[EC]*DHE-RSA-WITH-" 2299 2300 2301run_test "keyUsage srv: RSA, keyEncipherment -> RSA" \ 2302 "$P_SRV key_file=data_files/server2.key \ 2303 crt_file=data_files/server2.ku-ke.crt" \ 2304 "$P_CLI" \ 2305 0 \ 2306 -c "Ciphersuite is TLS-RSA-WITH-" 2307 2308run_test "keyUsage srv: RSA, keyAgreement -> fail" \ 2309 "$P_SRV key_file=data_files/server2.key \ 2310 crt_file=data_files/server2.ku-ka.crt" \ 2311 "$P_CLI" \ 2312 1 \ 2313 -C "Ciphersuite is " 2314 2315run_test "keyUsage srv: ECDSA, digitalSignature -> ECDHE-ECDSA" \ 2316 "$P_SRV key_file=data_files/server5.key \ 2317 crt_file=data_files/server5.ku-ds.crt" \ 2318 "$P_CLI" \ 2319 0 \ 2320 -c "Ciphersuite is TLS-ECDHE-ECDSA-WITH-" 2321 2322 2323run_test "keyUsage srv: ECDSA, keyAgreement -> ECDH-" \ 2324 "$P_SRV key_file=data_files/server5.key \ 2325 crt_file=data_files/server5.ku-ka.crt" \ 2326 "$P_CLI" \ 2327 0 \ 2328 -c "Ciphersuite is TLS-ECDH-" 2329 2330run_test "keyUsage srv: ECDSA, keyEncipherment -> fail" \ 2331 "$P_SRV key_file=data_files/server5.key \ 2332 crt_file=data_files/server5.ku-ke.crt" \ 2333 "$P_CLI" \ 2334 1 \ 2335 -C "Ciphersuite is " 2336 2337# Tests for keyUsage in leaf certificates, part 2: 2338# client-side checking of server cert 2339 2340run_test "keyUsage cli: DigitalSignature+KeyEncipherment, RSA: OK" \ 2341 "$O_SRV -key data_files/server2.key \ 2342 -cert data_files/server2.ku-ds_ke.crt" \ 2343 "$P_CLI debug_level=1 \ 2344 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 2345 0 \ 2346 -C "bad certificate (usage extensions)" \ 2347 -C "Processing of the Certificate handshake message failed" \ 2348 -c "Ciphersuite is TLS-" 2349 2350run_test "keyUsage cli: DigitalSignature+KeyEncipherment, DHE-RSA: OK" \ 2351 "$O_SRV -key data_files/server2.key \ 2352 -cert data_files/server2.ku-ds_ke.crt" \ 2353 "$P_CLI debug_level=1 \ 2354 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \ 2355 0 \ 2356 -C "bad certificate (usage extensions)" \ 2357 -C "Processing of the Certificate handshake message failed" \ 2358 -c "Ciphersuite is TLS-" 2359 2360run_test "keyUsage cli: KeyEncipherment, RSA: OK" \ 2361 "$O_SRV -key data_files/server2.key \ 2362 -cert data_files/server2.ku-ke.crt" \ 2363 "$P_CLI debug_level=1 \ 2364 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 2365 0 \ 2366 -C "bad certificate (usage extensions)" \ 2367 -C "Processing of the Certificate handshake message failed" \ 2368 -c "Ciphersuite is TLS-" 2369 2370run_test "keyUsage cli: KeyEncipherment, DHE-RSA: fail" \ 2371 "$O_SRV -key data_files/server2.key \ 2372 -cert data_files/server2.ku-ke.crt" \ 2373 "$P_CLI debug_level=1 \ 2374 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \ 2375 1 \ 2376 -c "bad certificate (usage extensions)" \ 2377 -c "Processing of the Certificate handshake message failed" \ 2378 -C "Ciphersuite is TLS-" 2379 2380run_test "keyUsage cli: KeyEncipherment, DHE-RSA: fail, soft" \ 2381 "$O_SRV -key data_files/server2.key \ 2382 -cert data_files/server2.ku-ke.crt" \ 2383 "$P_CLI debug_level=1 auth_mode=optional \ 2384 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \ 2385 0 \ 2386 -c "bad certificate (usage extensions)" \ 2387 -C "Processing of the Certificate handshake message failed" \ 2388 -c "Ciphersuite is TLS-" \ 2389 -c "! Usage does not match the keyUsage extension" 2390 2391run_test "keyUsage cli: DigitalSignature, DHE-RSA: OK" \ 2392 "$O_SRV -key data_files/server2.key \ 2393 -cert data_files/server2.ku-ds.crt" \ 2394 "$P_CLI debug_level=1 \ 2395 force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA" \ 2396 0 \ 2397 -C "bad certificate (usage extensions)" \ 2398 -C "Processing of the Certificate handshake message failed" \ 2399 -c "Ciphersuite is TLS-" 2400 2401run_test "keyUsage cli: DigitalSignature, RSA: fail" \ 2402 "$O_SRV -key data_files/server2.key \ 2403 -cert data_files/server2.ku-ds.crt" \ 2404 "$P_CLI debug_level=1 \ 2405 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 2406 1 \ 2407 -c "bad certificate (usage extensions)" \ 2408 -c "Processing of the Certificate handshake message failed" \ 2409 -C "Ciphersuite is TLS-" 2410 2411run_test "keyUsage cli: DigitalSignature, RSA: fail, soft" \ 2412 "$O_SRV -key data_files/server2.key \ 2413 -cert data_files/server2.ku-ds.crt" \ 2414 "$P_CLI debug_level=1 auth_mode=optional \ 2415 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 2416 0 \ 2417 -c "bad certificate (usage extensions)" \ 2418 -C "Processing of the Certificate handshake message failed" \ 2419 -c "Ciphersuite is TLS-" \ 2420 -c "! Usage does not match the keyUsage extension" 2421 2422# Tests for keyUsage in leaf certificates, part 3: 2423# server-side checking of client cert 2424 2425run_test "keyUsage cli-auth: RSA, DigitalSignature: OK" \ 2426 "$P_SRV debug_level=1 auth_mode=optional" \ 2427 "$O_CLI -key data_files/server2.key \ 2428 -cert data_files/server2.ku-ds.crt" \ 2429 0 \ 2430 -S "bad certificate (usage extensions)" \ 2431 -S "Processing of the Certificate handshake message failed" 2432 2433run_test "keyUsage cli-auth: RSA, KeyEncipherment: fail (soft)" \ 2434 "$P_SRV debug_level=1 auth_mode=optional" \ 2435 "$O_CLI -key data_files/server2.key \ 2436 -cert data_files/server2.ku-ke.crt" \ 2437 0 \ 2438 -s "bad certificate (usage extensions)" \ 2439 -S "Processing of the Certificate handshake message failed" 2440 2441run_test "keyUsage cli-auth: RSA, KeyEncipherment: fail (hard)" \ 2442 "$P_SRV debug_level=1 auth_mode=required" \ 2443 "$O_CLI -key data_files/server2.key \ 2444 -cert data_files/server2.ku-ke.crt" \ 2445 1 \ 2446 -s "bad certificate (usage extensions)" \ 2447 -s "Processing of the Certificate handshake message failed" 2448 2449run_test "keyUsage cli-auth: ECDSA, DigitalSignature: OK" \ 2450 "$P_SRV debug_level=1 auth_mode=optional" \ 2451 "$O_CLI -key data_files/server5.key \ 2452 -cert data_files/server5.ku-ds.crt" \ 2453 0 \ 2454 -S "bad certificate (usage extensions)" \ 2455 -S "Processing of the Certificate handshake message failed" 2456 2457run_test "keyUsage cli-auth: ECDSA, KeyAgreement: fail (soft)" \ 2458 "$P_SRV debug_level=1 auth_mode=optional" \ 2459 "$O_CLI -key data_files/server5.key \ 2460 -cert data_files/server5.ku-ka.crt" \ 2461 0 \ 2462 -s "bad certificate (usage extensions)" \ 2463 -S "Processing of the Certificate handshake message failed" 2464 2465# Tests for extendedKeyUsage, part 1: server-side certificate/suite selection 2466 2467run_test "extKeyUsage srv: serverAuth -> OK" \ 2468 "$P_SRV key_file=data_files/server5.key \ 2469 crt_file=data_files/server5.eku-srv.crt" \ 2470 "$P_CLI" \ 2471 0 2472 2473run_test "extKeyUsage srv: serverAuth,clientAuth -> OK" \ 2474 "$P_SRV key_file=data_files/server5.key \ 2475 crt_file=data_files/server5.eku-srv.crt" \ 2476 "$P_CLI" \ 2477 0 2478 2479run_test "extKeyUsage srv: codeSign,anyEKU -> OK" \ 2480 "$P_SRV key_file=data_files/server5.key \ 2481 crt_file=data_files/server5.eku-cs_any.crt" \ 2482 "$P_CLI" \ 2483 0 2484 2485run_test "extKeyUsage srv: codeSign -> fail" \ 2486 "$P_SRV key_file=data_files/server5.key \ 2487 crt_file=data_files/server5.eku-cli.crt" \ 2488 "$P_CLI" \ 2489 1 2490 2491# Tests for extendedKeyUsage, part 2: client-side checking of server cert 2492 2493run_test "extKeyUsage cli: serverAuth -> OK" \ 2494 "$O_SRV -key data_files/server5.key \ 2495 -cert data_files/server5.eku-srv.crt" \ 2496 "$P_CLI debug_level=1" \ 2497 0 \ 2498 -C "bad certificate (usage extensions)" \ 2499 -C "Processing of the Certificate handshake message failed" \ 2500 -c "Ciphersuite is TLS-" 2501 2502run_test "extKeyUsage cli: serverAuth,clientAuth -> OK" \ 2503 "$O_SRV -key data_files/server5.key \ 2504 -cert data_files/server5.eku-srv_cli.crt" \ 2505 "$P_CLI debug_level=1" \ 2506 0 \ 2507 -C "bad certificate (usage extensions)" \ 2508 -C "Processing of the Certificate handshake message failed" \ 2509 -c "Ciphersuite is TLS-" 2510 2511run_test "extKeyUsage cli: codeSign,anyEKU -> OK" \ 2512 "$O_SRV -key data_files/server5.key \ 2513 -cert data_files/server5.eku-cs_any.crt" \ 2514 "$P_CLI debug_level=1" \ 2515 0 \ 2516 -C "bad certificate (usage extensions)" \ 2517 -C "Processing of the Certificate handshake message failed" \ 2518 -c "Ciphersuite is TLS-" 2519 2520run_test "extKeyUsage cli: codeSign -> fail" \ 2521 "$O_SRV -key data_files/server5.key \ 2522 -cert data_files/server5.eku-cs.crt" \ 2523 "$P_CLI debug_level=1" \ 2524 1 \ 2525 -c "bad certificate (usage extensions)" \ 2526 -c "Processing of the Certificate handshake message failed" \ 2527 -C "Ciphersuite is TLS-" 2528 2529# Tests for extendedKeyUsage, part 3: server-side checking of client cert 2530 2531run_test "extKeyUsage cli-auth: clientAuth -> OK" \ 2532 "$P_SRV debug_level=1 auth_mode=optional" \ 2533 "$O_CLI -key data_files/server5.key \ 2534 -cert data_files/server5.eku-cli.crt" \ 2535 0 \ 2536 -S "bad certificate (usage extensions)" \ 2537 -S "Processing of the Certificate handshake message failed" 2538 2539run_test "extKeyUsage cli-auth: serverAuth,clientAuth -> OK" \ 2540 "$P_SRV debug_level=1 auth_mode=optional" \ 2541 "$O_CLI -key data_files/server5.key \ 2542 -cert data_files/server5.eku-srv_cli.crt" \ 2543 0 \ 2544 -S "bad certificate (usage extensions)" \ 2545 -S "Processing of the Certificate handshake message failed" 2546 2547run_test "extKeyUsage cli-auth: codeSign,anyEKU -> OK" \ 2548 "$P_SRV debug_level=1 auth_mode=optional" \ 2549 "$O_CLI -key data_files/server5.key \ 2550 -cert data_files/server5.eku-cs_any.crt" \ 2551 0 \ 2552 -S "bad certificate (usage extensions)" \ 2553 -S "Processing of the Certificate handshake message failed" 2554 2555run_test "extKeyUsage cli-auth: codeSign -> fail (soft)" \ 2556 "$P_SRV debug_level=1 auth_mode=optional" \ 2557 "$O_CLI -key data_files/server5.key \ 2558 -cert data_files/server5.eku-cs.crt" \ 2559 0 \ 2560 -s "bad certificate (usage extensions)" \ 2561 -S "Processing of the Certificate handshake message failed" 2562 2563run_test "extKeyUsage cli-auth: codeSign -> fail (hard)" \ 2564 "$P_SRV debug_level=1 auth_mode=required" \ 2565 "$O_CLI -key data_files/server5.key \ 2566 -cert data_files/server5.eku-cs.crt" \ 2567 1 \ 2568 -s "bad certificate (usage extensions)" \ 2569 -s "Processing of the Certificate handshake message failed" 2570 2571# Tests for DHM parameters loading 2572 2573run_test "DHM parameters: reference" \ 2574 "$P_SRV" \ 2575 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2576 debug_level=3" \ 2577 0 \ 2578 -c "value of 'DHM: P ' (2048 bits)" \ 2579 -c "value of 'DHM: G ' (2048 bits)" 2580 2581run_test "DHM parameters: other parameters" \ 2582 "$P_SRV dhm_file=data_files/dhparams.pem" \ 2583 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2584 debug_level=3" \ 2585 0 \ 2586 -c "value of 'DHM: P ' (1024 bits)" \ 2587 -c "value of 'DHM: G ' (2 bits)" 2588 2589# Tests for DHM client-side size checking 2590 2591run_test "DHM size: server default, client default, OK" \ 2592 "$P_SRV" \ 2593 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2594 debug_level=1" \ 2595 0 \ 2596 -C "DHM prime too short:" 2597 2598run_test "DHM size: server default, client 2048, OK" \ 2599 "$P_SRV" \ 2600 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2601 debug_level=1 dhmlen=2048" \ 2602 0 \ 2603 -C "DHM prime too short:" 2604 2605run_test "DHM size: server 1024, client default, OK" \ 2606 "$P_SRV dhm_file=data_files/dhparams.pem" \ 2607 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2608 debug_level=1" \ 2609 0 \ 2610 -C "DHM prime too short:" 2611 2612run_test "DHM size: server 1000, client default, rejected" \ 2613 "$P_SRV dhm_file=data_files/dh.1000.pem" \ 2614 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2615 debug_level=1" \ 2616 1 \ 2617 -c "DHM prime too short:" 2618 2619run_test "DHM size: server default, client 2049, rejected" \ 2620 "$P_SRV" \ 2621 "$P_CLI force_ciphersuite=TLS-DHE-RSA-WITH-AES-128-CBC-SHA \ 2622 debug_level=1 dhmlen=2049" \ 2623 1 \ 2624 -c "DHM prime too short:" 2625 2626# Tests for PSK callback 2627 2628run_test "PSK callback: psk, no callback" \ 2629 "$P_SRV psk=abc123 psk_identity=foo" \ 2630 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2631 psk_identity=foo psk=abc123" \ 2632 0 \ 2633 -S "SSL - None of the common ciphersuites is usable" \ 2634 -S "SSL - Unknown identity received" \ 2635 -S "SSL - Verification of the message MAC failed" 2636 2637run_test "PSK callback: no psk, no callback" \ 2638 "$P_SRV" \ 2639 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2640 psk_identity=foo psk=abc123" \ 2641 1 \ 2642 -s "SSL - None of the common ciphersuites is usable" \ 2643 -S "SSL - Unknown identity received" \ 2644 -S "SSL - Verification of the message MAC failed" 2645 2646run_test "PSK callback: callback overrides other settings" \ 2647 "$P_SRV psk=abc123 psk_identity=foo psk_list=abc,dead,def,beef" \ 2648 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2649 psk_identity=foo psk=abc123" \ 2650 1 \ 2651 -S "SSL - None of the common ciphersuites is usable" \ 2652 -s "SSL - Unknown identity received" \ 2653 -S "SSL - Verification of the message MAC failed" 2654 2655run_test "PSK callback: first id matches" \ 2656 "$P_SRV psk_list=abc,dead,def,beef" \ 2657 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2658 psk_identity=abc psk=dead" \ 2659 0 \ 2660 -S "SSL - None of the common ciphersuites is usable" \ 2661 -S "SSL - Unknown identity received" \ 2662 -S "SSL - Verification of the message MAC failed" 2663 2664run_test "PSK callback: second id matches" \ 2665 "$P_SRV psk_list=abc,dead,def,beef" \ 2666 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2667 psk_identity=def psk=beef" \ 2668 0 \ 2669 -S "SSL - None of the common ciphersuites is usable" \ 2670 -S "SSL - Unknown identity received" \ 2671 -S "SSL - Verification of the message MAC failed" 2672 2673run_test "PSK callback: no match" \ 2674 "$P_SRV psk_list=abc,dead,def,beef" \ 2675 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2676 psk_identity=ghi psk=beef" \ 2677 1 \ 2678 -S "SSL - None of the common ciphersuites is usable" \ 2679 -s "SSL - Unknown identity received" \ 2680 -S "SSL - Verification of the message MAC failed" 2681 2682run_test "PSK callback: wrong key" \ 2683 "$P_SRV psk_list=abc,dead,def,beef" \ 2684 "$P_CLI force_ciphersuite=TLS-PSK-WITH-AES-128-CBC-SHA \ 2685 psk_identity=abc psk=beef" \ 2686 1 \ 2687 -S "SSL - None of the common ciphersuites is usable" \ 2688 -S "SSL - Unknown identity received" \ 2689 -s "SSL - Verification of the message MAC failed" 2690 2691# Tests for EC J-PAKE 2692 2693requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2694run_test "ECJPAKE: client not configured" \ 2695 "$P_SRV debug_level=3" \ 2696 "$P_CLI debug_level=3" \ 2697 0 \ 2698 -C "add ciphersuite: c0ff" \ 2699 -C "adding ecjpake_kkpp extension" \ 2700 -S "found ecjpake kkpp extension" \ 2701 -S "skip ecjpake kkpp extension" \ 2702 -S "ciphersuite mismatch: ecjpake not configured" \ 2703 -S "server hello, ecjpake kkpp extension" \ 2704 -C "found ecjpake_kkpp extension" \ 2705 -S "None of the common ciphersuites is usable" 2706 2707requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2708run_test "ECJPAKE: server not configured" \ 2709 "$P_SRV debug_level=3" \ 2710 "$P_CLI debug_level=3 ecjpake_pw=bla \ 2711 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2712 1 \ 2713 -c "add ciphersuite: c0ff" \ 2714 -c "adding ecjpake_kkpp extension" \ 2715 -s "found ecjpake kkpp extension" \ 2716 -s "skip ecjpake kkpp extension" \ 2717 -s "ciphersuite mismatch: ecjpake not configured" \ 2718 -S "server hello, ecjpake kkpp extension" \ 2719 -C "found ecjpake_kkpp extension" \ 2720 -s "None of the common ciphersuites is usable" 2721 2722requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2723run_test "ECJPAKE: working, TLS" \ 2724 "$P_SRV debug_level=3 ecjpake_pw=bla" \ 2725 "$P_CLI debug_level=3 ecjpake_pw=bla \ 2726 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2727 0 \ 2728 -c "add ciphersuite: c0ff" \ 2729 -c "adding ecjpake_kkpp extension" \ 2730 -C "re-using cached ecjpake parameters" \ 2731 -s "found ecjpake kkpp extension" \ 2732 -S "skip ecjpake kkpp extension" \ 2733 -S "ciphersuite mismatch: ecjpake not configured" \ 2734 -s "server hello, ecjpake kkpp extension" \ 2735 -c "found ecjpake_kkpp extension" \ 2736 -S "None of the common ciphersuites is usable" \ 2737 -S "SSL - Verification of the message MAC failed" 2738 2739server_needs_more_time 1 2740requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2741run_test "ECJPAKE: password mismatch, TLS" \ 2742 "$P_SRV debug_level=3 ecjpake_pw=bla" \ 2743 "$P_CLI debug_level=3 ecjpake_pw=bad \ 2744 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2745 1 \ 2746 -C "re-using cached ecjpake parameters" \ 2747 -s "SSL - Verification of the message MAC failed" 2748 2749requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2750run_test "ECJPAKE: working, DTLS" \ 2751 "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \ 2752 "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \ 2753 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2754 0 \ 2755 -c "re-using cached ecjpake parameters" \ 2756 -S "SSL - Verification of the message MAC failed" 2757 2758requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2759run_test "ECJPAKE: working, DTLS, no cookie" \ 2760 "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla cookies=0" \ 2761 "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bla \ 2762 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2763 0 \ 2764 -C "re-using cached ecjpake parameters" \ 2765 -S "SSL - Verification of the message MAC failed" 2766 2767server_needs_more_time 1 2768requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2769run_test "ECJPAKE: password mismatch, DTLS" \ 2770 "$P_SRV debug_level=3 dtls=1 ecjpake_pw=bla" \ 2771 "$P_CLI debug_level=3 dtls=1 ecjpake_pw=bad \ 2772 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2773 1 \ 2774 -c "re-using cached ecjpake parameters" \ 2775 -s "SSL - Verification of the message MAC failed" 2776 2777# for tests with configs/config-thread.h 2778requires_config_enabled MBEDTLS_KEY_EXCHANGE_ECJPAKE 2779run_test "ECJPAKE: working, DTLS, nolog" \ 2780 "$P_SRV dtls=1 ecjpake_pw=bla" \ 2781 "$P_CLI dtls=1 ecjpake_pw=bla \ 2782 force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \ 2783 0 2784 2785# Tests for ciphersuites per version 2786 2787requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 2788run_test "Per-version suites: SSL3" \ 2789 "$P_SRV min_version=ssl3 version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \ 2790 "$P_CLI force_version=ssl3" \ 2791 0 \ 2792 -c "Ciphersuite is TLS-RSA-WITH-3DES-EDE-CBC-SHA" 2793 2794run_test "Per-version suites: TLS 1.0" \ 2795 "$P_SRV arc4=1 version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \ 2796 "$P_CLI force_version=tls1 arc4=1" \ 2797 0 \ 2798 -c "Ciphersuite is TLS-RSA-WITH-AES-256-CBC-SHA" 2799 2800run_test "Per-version suites: TLS 1.1" \ 2801 "$P_SRV version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \ 2802 "$P_CLI force_version=tls1_1" \ 2803 0 \ 2804 -c "Ciphersuite is TLS-RSA-WITH-AES-128-CBC-SHA" 2805 2806run_test "Per-version suites: TLS 1.2" \ 2807 "$P_SRV version_suites=TLS-RSA-WITH-3DES-EDE-CBC-SHA,TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \ 2808 "$P_CLI force_version=tls1_2" \ 2809 0 \ 2810 -c "Ciphersuite is TLS-RSA-WITH-AES-128-GCM-SHA256" 2811 2812# Test for ClientHello without extensions 2813 2814requires_gnutls 2815run_test "ClientHello without extensions" \ 2816 "$P_SRV debug_level=3" \ 2817 "$G_CLI --priority=NORMAL:%NO_EXTENSIONS:%DISABLE_SAFE_RENEGOTIATION" \ 2818 0 \ 2819 -s "dumping 'client hello extensions' (0 bytes)" 2820 2821# Tests for mbedtls_ssl_get_bytes_avail() 2822 2823run_test "mbedtls_ssl_get_bytes_avail: no extra data" \ 2824 "$P_SRV" \ 2825 "$P_CLI request_size=100" \ 2826 0 \ 2827 -s "Read from client: 100 bytes read$" 2828 2829run_test "mbedtls_ssl_get_bytes_avail: extra data" \ 2830 "$P_SRV" \ 2831 "$P_CLI request_size=500" \ 2832 0 \ 2833 -s "Read from client: 500 bytes read (.*+.*)" 2834 2835# Tests for small packets 2836 2837requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 2838run_test "Small packet SSLv3 BlockCipher" \ 2839 "$P_SRV min_version=ssl3" \ 2840 "$P_CLI request_size=1 force_version=ssl3 \ 2841 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2842 0 \ 2843 -s "Read from client: 1 bytes read" 2844 2845requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 2846run_test "Small packet SSLv3 StreamCipher" \ 2847 "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2848 "$P_CLI request_size=1 force_version=ssl3 \ 2849 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2850 0 \ 2851 -s "Read from client: 1 bytes read" 2852 2853run_test "Small packet TLS 1.0 BlockCipher" \ 2854 "$P_SRV" \ 2855 "$P_CLI request_size=1 force_version=tls1 \ 2856 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2857 0 \ 2858 -s "Read from client: 1 bytes read" 2859 2860run_test "Small packet TLS 1.0 BlockCipher without EtM" \ 2861 "$P_SRV" \ 2862 "$P_CLI request_size=1 force_version=tls1 etm=0 \ 2863 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2864 0 \ 2865 -s "Read from client: 1 bytes read" 2866 2867run_test "Small packet TLS 1.0 BlockCipher truncated MAC" \ 2868 "$P_SRV" \ 2869 "$P_CLI request_size=1 force_version=tls1 \ 2870 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \ 2871 trunc_hmac=1" \ 2872 0 \ 2873 -s "Read from client: 1 bytes read" 2874 2875run_test "Small packet TLS 1.0 StreamCipher truncated MAC" \ 2876 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2877 "$P_CLI request_size=1 force_version=tls1 \ 2878 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 2879 trunc_hmac=1" \ 2880 0 \ 2881 -s "Read from client: 1 bytes read" 2882 2883run_test "Small packet TLS 1.1 BlockCipher" \ 2884 "$P_SRV" \ 2885 "$P_CLI request_size=1 force_version=tls1_1 \ 2886 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2887 0 \ 2888 -s "Read from client: 1 bytes read" 2889 2890run_test "Small packet TLS 1.1 BlockCipher without EtM" \ 2891 "$P_SRV" \ 2892 "$P_CLI request_size=1 force_version=tls1_1 etm=0 \ 2893 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2894 0 \ 2895 -s "Read from client: 1 bytes read" 2896 2897run_test "Small packet TLS 1.1 StreamCipher" \ 2898 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2899 "$P_CLI request_size=1 force_version=tls1_1 \ 2900 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2901 0 \ 2902 -s "Read from client: 1 bytes read" 2903 2904run_test "Small packet TLS 1.1 BlockCipher truncated MAC" \ 2905 "$P_SRV" \ 2906 "$P_CLI request_size=1 force_version=tls1_1 \ 2907 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \ 2908 trunc_hmac=1" \ 2909 0 \ 2910 -s "Read from client: 1 bytes read" 2911 2912run_test "Small packet TLS 1.1 StreamCipher truncated MAC" \ 2913 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2914 "$P_CLI request_size=1 force_version=tls1_1 \ 2915 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 2916 trunc_hmac=1" \ 2917 0 \ 2918 -s "Read from client: 1 bytes read" 2919 2920run_test "Small packet TLS 1.2 BlockCipher" \ 2921 "$P_SRV" \ 2922 "$P_CLI request_size=1 force_version=tls1_2 \ 2923 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2924 0 \ 2925 -s "Read from client: 1 bytes read" 2926 2927run_test "Small packet TLS 1.2 BlockCipher without EtM" \ 2928 "$P_SRV" \ 2929 "$P_CLI request_size=1 force_version=tls1_2 etm=0 \ 2930 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2931 0 \ 2932 -s "Read from client: 1 bytes read" 2933 2934run_test "Small packet TLS 1.2 BlockCipher larger MAC" \ 2935 "$P_SRV" \ 2936 "$P_CLI request_size=1 force_version=tls1_2 \ 2937 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \ 2938 0 \ 2939 -s "Read from client: 1 bytes read" 2940 2941run_test "Small packet TLS 1.2 BlockCipher truncated MAC" \ 2942 "$P_SRV" \ 2943 "$P_CLI request_size=1 force_version=tls1_2 \ 2944 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \ 2945 trunc_hmac=1" \ 2946 0 \ 2947 -s "Read from client: 1 bytes read" 2948 2949run_test "Small packet TLS 1.2 StreamCipher" \ 2950 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2951 "$P_CLI request_size=1 force_version=tls1_2 \ 2952 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2953 0 \ 2954 -s "Read from client: 1 bytes read" 2955 2956run_test "Small packet TLS 1.2 StreamCipher truncated MAC" \ 2957 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 2958 "$P_CLI request_size=1 force_version=tls1_2 \ 2959 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 2960 trunc_hmac=1" \ 2961 0 \ 2962 -s "Read from client: 1 bytes read" 2963 2964run_test "Small packet TLS 1.2 AEAD" \ 2965 "$P_SRV" \ 2966 "$P_CLI request_size=1 force_version=tls1_2 \ 2967 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \ 2968 0 \ 2969 -s "Read from client: 1 bytes read" 2970 2971run_test "Small packet TLS 1.2 AEAD shorter tag" \ 2972 "$P_SRV" \ 2973 "$P_CLI request_size=1 force_version=tls1_2 \ 2974 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \ 2975 0 \ 2976 -s "Read from client: 1 bytes read" 2977 2978# A test for extensions in SSLv3 2979 2980requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 2981run_test "SSLv3 with extensions, server side" \ 2982 "$P_SRV min_version=ssl3 debug_level=3" \ 2983 "$P_CLI force_version=ssl3 tickets=1 max_frag_len=4096 alpn=abc,1234" \ 2984 0 \ 2985 -S "dumping 'client hello extensions'" \ 2986 -S "server hello, total extension length:" 2987 2988# Test for large packets 2989 2990requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 2991run_test "Large packet SSLv3 BlockCipher" \ 2992 "$P_SRV min_version=ssl3" \ 2993 "$P_CLI request_size=16384 force_version=ssl3 recsplit=0 \ 2994 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 2995 0 \ 2996 -s "Read from client: 16384 bytes read" 2997 2998requires_config_enabled MBEDTLS_SSL_PROTO_SSL3 2999run_test "Large packet SSLv3 StreamCipher" \ 3000 "$P_SRV min_version=ssl3 arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3001 "$P_CLI request_size=16384 force_version=ssl3 \ 3002 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3003 0 \ 3004 -s "Read from client: 16384 bytes read" 3005 3006run_test "Large packet TLS 1.0 BlockCipher" \ 3007 "$P_SRV" \ 3008 "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \ 3009 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 3010 0 \ 3011 -s "Read from client: 16384 bytes read" 3012 3013run_test "Large packet TLS 1.0 BlockCipher truncated MAC" \ 3014 "$P_SRV" \ 3015 "$P_CLI request_size=16384 force_version=tls1 recsplit=0 \ 3016 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \ 3017 trunc_hmac=1" \ 3018 0 \ 3019 -s "Read from client: 16384 bytes read" 3020 3021run_test "Large packet TLS 1.0 StreamCipher truncated MAC" \ 3022 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3023 "$P_CLI request_size=16384 force_version=tls1 \ 3024 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 3025 trunc_hmac=1" \ 3026 0 \ 3027 -s "Read from client: 16384 bytes read" 3028 3029run_test "Large packet TLS 1.1 BlockCipher" \ 3030 "$P_SRV" \ 3031 "$P_CLI request_size=16384 force_version=tls1_1 \ 3032 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 3033 0 \ 3034 -s "Read from client: 16384 bytes read" 3035 3036run_test "Large packet TLS 1.1 StreamCipher" \ 3037 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3038 "$P_CLI request_size=16384 force_version=tls1_1 \ 3039 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3040 0 \ 3041 -s "Read from client: 16384 bytes read" 3042 3043run_test "Large packet TLS 1.1 BlockCipher truncated MAC" \ 3044 "$P_SRV" \ 3045 "$P_CLI request_size=16384 force_version=tls1_1 \ 3046 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \ 3047 trunc_hmac=1" \ 3048 0 \ 3049 -s "Read from client: 16384 bytes read" 3050 3051run_test "Large packet TLS 1.1 StreamCipher truncated MAC" \ 3052 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3053 "$P_CLI request_size=16384 force_version=tls1_1 \ 3054 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 3055 trunc_hmac=1" \ 3056 0 \ 3057 -s "Read from client: 16384 bytes read" 3058 3059run_test "Large packet TLS 1.2 BlockCipher" \ 3060 "$P_SRV" \ 3061 "$P_CLI request_size=16384 force_version=tls1_2 \ 3062 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA" \ 3063 0 \ 3064 -s "Read from client: 16384 bytes read" 3065 3066run_test "Large packet TLS 1.2 BlockCipher larger MAC" \ 3067 "$P_SRV" \ 3068 "$P_CLI request_size=16384 force_version=tls1_2 \ 3069 force_ciphersuite=TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" \ 3070 0 \ 3071 -s "Read from client: 16384 bytes read" 3072 3073run_test "Large packet TLS 1.2 BlockCipher truncated MAC" \ 3074 "$P_SRV" \ 3075 "$P_CLI request_size=16384 force_version=tls1_2 \ 3076 force_ciphersuite=TLS-RSA-WITH-AES-256-CBC-SHA \ 3077 trunc_hmac=1" \ 3078 0 \ 3079 -s "Read from client: 16384 bytes read" 3080 3081run_test "Large packet TLS 1.2 StreamCipher" \ 3082 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3083 "$P_CLI request_size=16384 force_version=tls1_2 \ 3084 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3085 0 \ 3086 -s "Read from client: 16384 bytes read" 3087 3088run_test "Large packet TLS 1.2 StreamCipher truncated MAC" \ 3089 "$P_SRV arc4=1 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA" \ 3090 "$P_CLI request_size=16384 force_version=tls1_2 \ 3091 force_ciphersuite=TLS-RSA-WITH-RC4-128-SHA \ 3092 trunc_hmac=1" \ 3093 0 \ 3094 -s "Read from client: 16384 bytes read" 3095 3096run_test "Large packet TLS 1.2 AEAD" \ 3097 "$P_SRV" \ 3098 "$P_CLI request_size=16384 force_version=tls1_2 \ 3099 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM" \ 3100 0 \ 3101 -s "Read from client: 16384 bytes read" 3102 3103run_test "Large packet TLS 1.2 AEAD shorter tag" \ 3104 "$P_SRV" \ 3105 "$P_CLI request_size=16384 force_version=tls1_2 \ 3106 force_ciphersuite=TLS-RSA-WITH-AES-256-CCM-8" \ 3107 0 \ 3108 -s "Read from client: 16384 bytes read" 3109 3110# Tests for DTLS HelloVerifyRequest 3111 3112run_test "DTLS cookie: enabled" \ 3113 "$P_SRV dtls=1 debug_level=2" \ 3114 "$P_CLI dtls=1 debug_level=2" \ 3115 0 \ 3116 -s "cookie verification failed" \ 3117 -s "cookie verification passed" \ 3118 -S "cookie verification skipped" \ 3119 -c "received hello verify request" \ 3120 -s "hello verification requested" \ 3121 -S "SSL - The requested feature is not available" 3122 3123run_test "DTLS cookie: disabled" \ 3124 "$P_SRV dtls=1 debug_level=2 cookies=0" \ 3125 "$P_CLI dtls=1 debug_level=2" \ 3126 0 \ 3127 -S "cookie verification failed" \ 3128 -S "cookie verification passed" \ 3129 -s "cookie verification skipped" \ 3130 -C "received hello verify request" \ 3131 -S "hello verification requested" \ 3132 -S "SSL - The requested feature is not available" 3133 3134run_test "DTLS cookie: default (failing)" \ 3135 "$P_SRV dtls=1 debug_level=2 cookies=-1" \ 3136 "$P_CLI dtls=1 debug_level=2 hs_timeout=100-400" \ 3137 1 \ 3138 -s "cookie verification failed" \ 3139 -S "cookie verification passed" \ 3140 -S "cookie verification skipped" \ 3141 -C "received hello verify request" \ 3142 -S "hello verification requested" \ 3143 -s "SSL - The requested feature is not available" 3144 3145requires_ipv6 3146run_test "DTLS cookie: enabled, IPv6" \ 3147 "$P_SRV dtls=1 debug_level=2 server_addr=::1" \ 3148 "$P_CLI dtls=1 debug_level=2 server_addr=::1" \ 3149 0 \ 3150 -s "cookie verification failed" \ 3151 -s "cookie verification passed" \ 3152 -S "cookie verification skipped" \ 3153 -c "received hello verify request" \ 3154 -s "hello verification requested" \ 3155 -S "SSL - The requested feature is not available" 3156 3157run_test "DTLS cookie: enabled, nbio" \ 3158 "$P_SRV dtls=1 nbio=2 debug_level=2" \ 3159 "$P_CLI dtls=1 nbio=2 debug_level=2" \ 3160 0 \ 3161 -s "cookie verification failed" \ 3162 -s "cookie verification passed" \ 3163 -S "cookie verification skipped" \ 3164 -c "received hello verify request" \ 3165 -s "hello verification requested" \ 3166 -S "SSL - The requested feature is not available" 3167 3168# Tests for client reconnecting from the same port with DTLS 3169 3170not_with_valgrind # spurious resend 3171run_test "DTLS client reconnect from same port: reference" \ 3172 "$P_SRV dtls=1 exchanges=2 read_timeout=1000" \ 3173 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000" \ 3174 0 \ 3175 -C "resend" \ 3176 -S "The operation timed out" \ 3177 -S "Client initiated reconnection from same port" 3178 3179not_with_valgrind # spurious resend 3180run_test "DTLS client reconnect from same port: reconnect" \ 3181 "$P_SRV dtls=1 exchanges=2 read_timeout=1000" \ 3182 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000 reconnect_hard=1" \ 3183 0 \ 3184 -C "resend" \ 3185 -S "The operation timed out" \ 3186 -s "Client initiated reconnection from same port" 3187 3188not_with_valgrind # server/client too slow to respond in time (next test has higher timeouts) 3189run_test "DTLS client reconnect from same port: reconnect, nbio, no valgrind" \ 3190 "$P_SRV dtls=1 exchanges=2 read_timeout=1000 nbio=2" \ 3191 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-1000 reconnect_hard=1" \ 3192 0 \ 3193 -S "The operation timed out" \ 3194 -s "Client initiated reconnection from same port" 3195 3196only_with_valgrind # Only with valgrind, do previous test but with higher read_timeout and hs_timeout 3197run_test "DTLS client reconnect from same port: reconnect, nbio, valgrind" \ 3198 "$P_SRV dtls=1 exchanges=2 read_timeout=2000 nbio=2 hs_timeout=1500-6000" \ 3199 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=1500-3000 reconnect_hard=1" \ 3200 0 \ 3201 -S "The operation timed out" \ 3202 -s "Client initiated reconnection from same port" 3203 3204run_test "DTLS client reconnect from same port: no cookies" \ 3205 "$P_SRV dtls=1 exchanges=2 read_timeout=1000 cookies=0" \ 3206 "$P_CLI dtls=1 exchanges=2 debug_level=2 hs_timeout=500-8000 reconnect_hard=1" \ 3207 0 \ 3208 -s "The operation timed out" \ 3209 -S "Client initiated reconnection from same port" 3210 3211# Tests for various cases of client authentication with DTLS 3212# (focused on handshake flows and message parsing) 3213 3214run_test "DTLS client auth: required" \ 3215 "$P_SRV dtls=1 auth_mode=required" \ 3216 "$P_CLI dtls=1" \ 3217 0 \ 3218 -s "Verifying peer X.509 certificate... ok" 3219 3220run_test "DTLS client auth: optional, client has no cert" \ 3221 "$P_SRV dtls=1 auth_mode=optional" \ 3222 "$P_CLI dtls=1 crt_file=none key_file=none" \ 3223 0 \ 3224 -s "! Certificate was missing" 3225 3226run_test "DTLS client auth: none, client has no cert" \ 3227 "$P_SRV dtls=1 auth_mode=none" \ 3228 "$P_CLI dtls=1 crt_file=none key_file=none debug_level=2" \ 3229 0 \ 3230 -c "skip write certificate$" \ 3231 -s "! Certificate verification was skipped" 3232 3233run_test "DTLS wrong PSK: badmac alert" \ 3234 "$P_SRV dtls=1 psk=abc123 force_ciphersuite=TLS-PSK-WITH-AES-128-GCM-SHA256" \ 3235 "$P_CLI dtls=1 psk=abc124" \ 3236 1 \ 3237 -s "SSL - Verification of the message MAC failed" \ 3238 -c "SSL - A fatal alert message was received from our peer" 3239 3240# Tests for receiving fragmented handshake messages with DTLS 3241 3242requires_gnutls 3243run_test "DTLS reassembly: no fragmentation (gnutls server)" \ 3244 "$G_SRV -u --mtu 2048 -a" \ 3245 "$P_CLI dtls=1 debug_level=2" \ 3246 0 \ 3247 -C "found fragmented DTLS handshake message" \ 3248 -C "error" 3249 3250requires_gnutls 3251run_test "DTLS reassembly: some fragmentation (gnutls server)" \ 3252 "$G_SRV -u --mtu 512" \ 3253 "$P_CLI dtls=1 debug_level=2" \ 3254 0 \ 3255 -c "found fragmented DTLS handshake message" \ 3256 -C "error" 3257 3258requires_gnutls 3259run_test "DTLS reassembly: more fragmentation (gnutls server)" \ 3260 "$G_SRV -u --mtu 128" \ 3261 "$P_CLI dtls=1 debug_level=2" \ 3262 0 \ 3263 -c "found fragmented DTLS handshake message" \ 3264 -C "error" 3265 3266requires_gnutls 3267run_test "DTLS reassembly: more fragmentation, nbio (gnutls server)" \ 3268 "$G_SRV -u --mtu 128" \ 3269 "$P_CLI dtls=1 nbio=2 debug_level=2" \ 3270 0 \ 3271 -c "found fragmented DTLS handshake message" \ 3272 -C "error" 3273 3274requires_gnutls 3275run_test "DTLS reassembly: fragmentation, renego (gnutls server)" \ 3276 "$G_SRV -u --mtu 256" \ 3277 "$P_CLI debug_level=3 dtls=1 renegotiation=1 renegotiate=1" \ 3278 0 \ 3279 -c "found fragmented DTLS handshake message" \ 3280 -c "client hello, adding renegotiation extension" \ 3281 -c "found renegotiation extension" \ 3282 -c "=> renegotiate" \ 3283 -C "mbedtls_ssl_handshake returned" \ 3284 -C "error" \ 3285 -s "Extra-header:" 3286 3287requires_gnutls 3288run_test "DTLS reassembly: fragmentation, nbio, renego (gnutls server)" \ 3289 "$G_SRV -u --mtu 256" \ 3290 "$P_CLI debug_level=3 nbio=2 dtls=1 renegotiation=1 renegotiate=1" \ 3291 0 \ 3292 -c "found fragmented DTLS handshake message" \ 3293 -c "client hello, adding renegotiation extension" \ 3294 -c "found renegotiation extension" \ 3295 -c "=> renegotiate" \ 3296 -C "mbedtls_ssl_handshake returned" \ 3297 -C "error" \ 3298 -s "Extra-header:" 3299 3300run_test "DTLS reassembly: no fragmentation (openssl server)" \ 3301 "$O_SRV -dtls1 -mtu 2048" \ 3302 "$P_CLI dtls=1 debug_level=2" \ 3303 0 \ 3304 -C "found fragmented DTLS handshake message" \ 3305 -C "error" 3306 3307run_test "DTLS reassembly: some fragmentation (openssl server)" \ 3308 "$O_SRV -dtls1 -mtu 768" \ 3309 "$P_CLI dtls=1 debug_level=2" \ 3310 0 \ 3311 -c "found fragmented DTLS handshake message" \ 3312 -C "error" 3313 3314run_test "DTLS reassembly: more fragmentation (openssl server)" \ 3315 "$O_SRV -dtls1 -mtu 256" \ 3316 "$P_CLI dtls=1 debug_level=2" \ 3317 0 \ 3318 -c "found fragmented DTLS handshake message" \ 3319 -C "error" 3320 3321run_test "DTLS reassembly: fragmentation, nbio (openssl server)" \ 3322 "$O_SRV -dtls1 -mtu 256" \ 3323 "$P_CLI dtls=1 nbio=2 debug_level=2" \ 3324 0 \ 3325 -c "found fragmented DTLS handshake message" \ 3326 -C "error" 3327 3328# Tests for specific things with "unreliable" UDP connection 3329 3330not_with_valgrind # spurious resend due to timeout 3331run_test "DTLS proxy: reference" \ 3332 -p "$P_PXY" \ 3333 "$P_SRV dtls=1 debug_level=2" \ 3334 "$P_CLI dtls=1 debug_level=2" \ 3335 0 \ 3336 -C "replayed record" \ 3337 -S "replayed record" \ 3338 -C "record from another epoch" \ 3339 -S "record from another epoch" \ 3340 -C "discarding invalid record" \ 3341 -S "discarding invalid record" \ 3342 -S "resend" \ 3343 -s "Extra-header:" \ 3344 -c "HTTP/1.0 200 OK" 3345 3346not_with_valgrind # spurious resend due to timeout 3347run_test "DTLS proxy: duplicate every packet" \ 3348 -p "$P_PXY duplicate=1" \ 3349 "$P_SRV dtls=1 debug_level=2" \ 3350 "$P_CLI dtls=1 debug_level=2" \ 3351 0 \ 3352 -c "replayed record" \ 3353 -s "replayed record" \ 3354 -c "discarding invalid record" \ 3355 -s "discarding invalid record" \ 3356 -S "resend" \ 3357 -s "Extra-header:" \ 3358 -c "HTTP/1.0 200 OK" 3359 3360run_test "DTLS proxy: duplicate every packet, server anti-replay off" \ 3361 -p "$P_PXY duplicate=1" \ 3362 "$P_SRV dtls=1 debug_level=2 anti_replay=0" \ 3363 "$P_CLI dtls=1 debug_level=2" \ 3364 0 \ 3365 -c "replayed record" \ 3366 -S "replayed record" \ 3367 -c "discarding invalid record" \ 3368 -s "discarding invalid record" \ 3369 -c "resend" \ 3370 -s "resend" \ 3371 -s "Extra-header:" \ 3372 -c "HTTP/1.0 200 OK" 3373 3374run_test "DTLS proxy: inject invalid AD record, default badmac_limit" \ 3375 -p "$P_PXY bad_ad=1" \ 3376 "$P_SRV dtls=1 debug_level=1" \ 3377 "$P_CLI dtls=1 debug_level=1 read_timeout=100" \ 3378 0 \ 3379 -c "discarding invalid record (mac)" \ 3380 -s "discarding invalid record (mac)" \ 3381 -s "Extra-header:" \ 3382 -c "HTTP/1.0 200 OK" \ 3383 -S "too many records with bad MAC" \ 3384 -S "Verification of the message MAC failed" 3385 3386run_test "DTLS proxy: inject invalid AD record, badmac_limit 1" \ 3387 -p "$P_PXY bad_ad=1" \ 3388 "$P_SRV dtls=1 debug_level=1 badmac_limit=1" \ 3389 "$P_CLI dtls=1 debug_level=1 read_timeout=100" \ 3390 1 \ 3391 -C "discarding invalid record (mac)" \ 3392 -S "discarding invalid record (mac)" \ 3393 -S "Extra-header:" \ 3394 -C "HTTP/1.0 200 OK" \ 3395 -s "too many records with bad MAC" \ 3396 -s "Verification of the message MAC failed" 3397 3398run_test "DTLS proxy: inject invalid AD record, badmac_limit 2" \ 3399 -p "$P_PXY bad_ad=1" \ 3400 "$P_SRV dtls=1 debug_level=1 badmac_limit=2" \ 3401 "$P_CLI dtls=1 debug_level=1 read_timeout=100" \ 3402 0 \ 3403 -c "discarding invalid record (mac)" \ 3404 -s "discarding invalid record (mac)" \ 3405 -s "Extra-header:" \ 3406 -c "HTTP/1.0 200 OK" \ 3407 -S "too many records with bad MAC" \ 3408 -S "Verification of the message MAC failed" 3409 3410run_test "DTLS proxy: inject invalid AD record, badmac_limit 2, exchanges 2"\ 3411 -p "$P_PXY bad_ad=1" \ 3412 "$P_SRV dtls=1 debug_level=1 badmac_limit=2 exchanges=2" \ 3413 "$P_CLI dtls=1 debug_level=1 read_timeout=100 exchanges=2" \ 3414 1 \ 3415 -c "discarding invalid record (mac)" \ 3416 -s "discarding invalid record (mac)" \ 3417 -s "Extra-header:" \ 3418 -c "HTTP/1.0 200 OK" \ 3419 -s "too many records with bad MAC" \ 3420 -s "Verification of the message MAC failed" 3421 3422run_test "DTLS proxy: delay ChangeCipherSpec" \ 3423 -p "$P_PXY delay_ccs=1" \ 3424 "$P_SRV dtls=1 debug_level=1" \ 3425 "$P_CLI dtls=1 debug_level=1" \ 3426 0 \ 3427 -c "record from another epoch" \ 3428 -s "record from another epoch" \ 3429 -c "discarding invalid record" \ 3430 -s "discarding invalid record" \ 3431 -s "Extra-header:" \ 3432 -c "HTTP/1.0 200 OK" 3433 3434# Tests for "randomly unreliable connection": try a variety of flows and peers 3435 3436client_needs_more_time 2 3437run_test "DTLS proxy: 3d (drop, delay, duplicate), \"short\" PSK handshake" \ 3438 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3439 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3440 psk=abc123" \ 3441 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3442 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \ 3443 0 \ 3444 -s "Extra-header:" \ 3445 -c "HTTP/1.0 200 OK" 3446 3447client_needs_more_time 2 3448run_test "DTLS proxy: 3d, \"short\" RSA handshake" \ 3449 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3450 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none" \ 3451 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 \ 3452 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \ 3453 0 \ 3454 -s "Extra-header:" \ 3455 -c "HTTP/1.0 200 OK" 3456 3457client_needs_more_time 2 3458run_test "DTLS proxy: 3d, \"short\" (no ticket, no cli_auth) FS handshake" \ 3459 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3460 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none" \ 3461 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0" \ 3462 0 \ 3463 -s "Extra-header:" \ 3464 -c "HTTP/1.0 200 OK" 3465 3466client_needs_more_time 2 3467run_test "DTLS proxy: 3d, FS, client auth" \ 3468 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3469 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=required" \ 3470 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0" \ 3471 0 \ 3472 -s "Extra-header:" \ 3473 -c "HTTP/1.0 200 OK" 3474 3475client_needs_more_time 2 3476run_test "DTLS proxy: 3d, FS, ticket" \ 3477 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3478 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=1 auth_mode=none" \ 3479 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=1" \ 3480 0 \ 3481 -s "Extra-header:" \ 3482 -c "HTTP/1.0 200 OK" 3483 3484client_needs_more_time 2 3485run_test "DTLS proxy: 3d, max handshake (FS, ticket + client auth)" \ 3486 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3487 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=1 auth_mode=required" \ 3488 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=1" \ 3489 0 \ 3490 -s "Extra-header:" \ 3491 -c "HTTP/1.0 200 OK" 3492 3493client_needs_more_time 2 3494run_test "DTLS proxy: 3d, max handshake, nbio" \ 3495 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3496 "$P_SRV dtls=1 hs_timeout=250-10000 nbio=2 tickets=1 \ 3497 auth_mode=required" \ 3498 "$P_CLI dtls=1 hs_timeout=250-10000 nbio=2 tickets=1" \ 3499 0 \ 3500 -s "Extra-header:" \ 3501 -c "HTTP/1.0 200 OK" 3502 3503client_needs_more_time 4 3504run_test "DTLS proxy: 3d, min handshake, resumption" \ 3505 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3506 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3507 psk=abc123 debug_level=3" \ 3508 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3509 debug_level=3 reconnect=1 read_timeout=1000 max_resend=10 \ 3510 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \ 3511 0 \ 3512 -s "a session has been resumed" \ 3513 -c "a session has been resumed" \ 3514 -s "Extra-header:" \ 3515 -c "HTTP/1.0 200 OK" 3516 3517client_needs_more_time 4 3518run_test "DTLS proxy: 3d, min handshake, resumption, nbio" \ 3519 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3520 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3521 psk=abc123 debug_level=3 nbio=2" \ 3522 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3523 debug_level=3 reconnect=1 read_timeout=1000 max_resend=10 \ 3524 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8 nbio=2" \ 3525 0 \ 3526 -s "a session has been resumed" \ 3527 -c "a session has been resumed" \ 3528 -s "Extra-header:" \ 3529 -c "HTTP/1.0 200 OK" 3530 3531client_needs_more_time 4 3532run_test "DTLS proxy: 3d, min handshake, client-initiated renego" \ 3533 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3534 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3535 psk=abc123 renegotiation=1 debug_level=2" \ 3536 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3537 renegotiate=1 debug_level=2 \ 3538 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \ 3539 0 \ 3540 -c "=> renegotiate" \ 3541 -s "=> renegotiate" \ 3542 -s "Extra-header:" \ 3543 -c "HTTP/1.0 200 OK" 3544 3545client_needs_more_time 4 3546run_test "DTLS proxy: 3d, min handshake, client-initiated renego, nbio" \ 3547 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3548 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3549 psk=abc123 renegotiation=1 debug_level=2" \ 3550 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3551 renegotiate=1 debug_level=2 \ 3552 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \ 3553 0 \ 3554 -c "=> renegotiate" \ 3555 -s "=> renegotiate" \ 3556 -s "Extra-header:" \ 3557 -c "HTTP/1.0 200 OK" 3558 3559client_needs_more_time 4 3560run_test "DTLS proxy: 3d, min handshake, server-initiated renego" \ 3561 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3562 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3563 psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \ 3564 debug_level=2" \ 3565 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3566 renegotiation=1 exchanges=4 debug_level=2 \ 3567 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \ 3568 0 \ 3569 -c "=> renegotiate" \ 3570 -s "=> renegotiate" \ 3571 -s "Extra-header:" \ 3572 -c "HTTP/1.0 200 OK" 3573 3574client_needs_more_time 4 3575run_test "DTLS proxy: 3d, min handshake, server-initiated renego, nbio" \ 3576 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3577 "$P_SRV dtls=1 hs_timeout=250-10000 tickets=0 auth_mode=none \ 3578 psk=abc123 renegotiate=1 renegotiation=1 exchanges=4 \ 3579 debug_level=2 nbio=2" \ 3580 "$P_CLI dtls=1 hs_timeout=250-10000 tickets=0 psk=abc123 \ 3581 renegotiation=1 exchanges=4 debug_level=2 nbio=2 \ 3582 force_ciphersuite=TLS-PSK-WITH-AES-128-CCM-8" \ 3583 0 \ 3584 -c "=> renegotiate" \ 3585 -s "=> renegotiate" \ 3586 -s "Extra-header:" \ 3587 -c "HTTP/1.0 200 OK" 3588 3589client_needs_more_time 6 3590not_with_valgrind # risk of non-mbedtls peer timing out 3591run_test "DTLS proxy: 3d, openssl server" \ 3592 -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \ 3593 "$O_SRV -dtls1 -mtu 2048" \ 3594 "$P_CLI dtls=1 hs_timeout=250-60000 tickets=0" \ 3595 0 \ 3596 -c "HTTP/1.0 200 OK" 3597 3598client_needs_more_time 8 3599not_with_valgrind # risk of non-mbedtls peer timing out 3600run_test "DTLS proxy: 3d, openssl server, fragmentation" \ 3601 -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \ 3602 "$O_SRV -dtls1 -mtu 768" \ 3603 "$P_CLI dtls=1 hs_timeout=250-60000 tickets=0" \ 3604 0 \ 3605 -c "HTTP/1.0 200 OK" 3606 3607client_needs_more_time 8 3608not_with_valgrind # risk of non-mbedtls peer timing out 3609run_test "DTLS proxy: 3d, openssl server, fragmentation, nbio" \ 3610 -p "$P_PXY drop=5 delay=5 duplicate=5 protect_hvr=1" \ 3611 "$O_SRV -dtls1 -mtu 768" \ 3612 "$P_CLI dtls=1 hs_timeout=250-60000 nbio=2 tickets=0" \ 3613 0 \ 3614 -c "HTTP/1.0 200 OK" 3615 3616requires_gnutls 3617client_needs_more_time 6 3618not_with_valgrind # risk of non-mbedtls peer timing out 3619run_test "DTLS proxy: 3d, gnutls server" \ 3620 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3621 "$G_SRV -u --mtu 2048 -a" \ 3622 "$P_CLI dtls=1 hs_timeout=250-60000" \ 3623 0 \ 3624 -s "Extra-header:" \ 3625 -c "Extra-header:" 3626 3627requires_gnutls 3628client_needs_more_time 8 3629not_with_valgrind # risk of non-mbedtls peer timing out 3630run_test "DTLS proxy: 3d, gnutls server, fragmentation" \ 3631 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3632 "$G_SRV -u --mtu 512" \ 3633 "$P_CLI dtls=1 hs_timeout=250-60000" \ 3634 0 \ 3635 -s "Extra-header:" \ 3636 -c "Extra-header:" 3637 3638requires_gnutls 3639client_needs_more_time 8 3640not_with_valgrind # risk of non-mbedtls peer timing out 3641run_test "DTLS proxy: 3d, gnutls server, fragmentation, nbio" \ 3642 -p "$P_PXY drop=5 delay=5 duplicate=5" \ 3643 "$G_SRV -u --mtu 512" \ 3644 "$P_CLI dtls=1 hs_timeout=250-60000 nbio=2" \ 3645 0 \ 3646 -s "Extra-header:" \ 3647 -c "Extra-header:" 3648 3649# Final report 3650 3651echo "------------------------------------------------------------------------" 3652 3653if [ $FAILS = 0 ]; then 3654 printf "PASSED" 3655else 3656 printf "FAILED" 3657fi 3658PASSES=$(( $TESTS - $FAILS )) 3659echo " ($PASSES / $TESTS tests ($SKIPS skipped))" 3660 3661exit $FAILS 3662