1e0c4386eSCy Schubert#! /usr/bin/env perl 2*e7be843bSPierre Pronchery# Copyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved. 3e0c4386eSCy Schubert# 4e0c4386eSCy Schubert# Licensed under the Apache License 2.0 (the "License"). You may not use 5e0c4386eSCy Schubert# this file except in compliance with the License. You can obtain a copy 6e0c4386eSCy Schubert# in the file LICENSE in the source distribution or at 7e0c4386eSCy Schubert# https://www.openssl.org/source/license.html 8e0c4386eSCy Schubert 9e0c4386eSCy Schubertuse strict; 10e0c4386eSCy Schubertuse OpenSSL::Test qw/:DEFAULT cmdstr srctop_file srctop_dir bldtop_dir/; 11e0c4386eSCy Schubertuse OpenSSL::Test::Utils; 12e0c4386eSCy Schubertuse File::Temp qw(tempfile); 13e0c4386eSCy Schubertuse TLSProxy::Proxy; 14e0c4386eSCy Schubertuse checkhandshake qw(checkhandshake @handmessages @extensions); 15e0c4386eSCy Schubert 16e0c4386eSCy Schubertmy $test_name = "test_sslmessages"; 17e0c4386eSCy Schubertsetup($test_name); 18e0c4386eSCy Schubert 19e0c4386eSCy Schubertplan skip_all => "TLSProxy isn't usable on $^O" 20e0c4386eSCy Schubert if $^O =~ /^(VMS)$/; 21e0c4386eSCy Schubert 22e0c4386eSCy Schubertplan skip_all => "$test_name needs the dynamic engine feature enabled" 23e0c4386eSCy Schubert if disabled("engine") || disabled("dynamic-engine"); 24e0c4386eSCy Schubert 25e0c4386eSCy Schubertplan skip_all => "$test_name needs the sock feature enabled" 26e0c4386eSCy Schubert if disabled("sock"); 27e0c4386eSCy Schubert 28e0c4386eSCy Schubertplan skip_all => "$test_name needs TLS enabled" 29e0c4386eSCy Schubert if alldisabled(available_protocols("tls")) 30e0c4386eSCy Schubert || (!disabled("tls1_3") && disabled("tls1_2")); 31e0c4386eSCy Schubert 32e0c4386eSCy Schubertmy $proxy = TLSProxy::Proxy->new( 33e0c4386eSCy Schubert undef, 34e0c4386eSCy Schubert cmdstr(app(["openssl"]), display => 1), 35e0c4386eSCy Schubert srctop_file("apps", "server.pem"), 36e0c4386eSCy Schubert (!$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE}) 37e0c4386eSCy Schubert); 38e0c4386eSCy Schubert 39e0c4386eSCy Schubert@handmessages = ( 40e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, 41e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES], 42e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, 43e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES], 44e0c4386eSCy Schubert [TLSProxy::Message::MT_CERTIFICATE, 45e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES 46e0c4386eSCy Schubert & ~checkhandshake::RESUME_HANDSHAKE], 47e0c4386eSCy Schubert (disabled("ec") ? () : 48e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_KEY_EXCHANGE, 49e0c4386eSCy Schubert checkhandshake::EC_HANDSHAKE]), 50e0c4386eSCy Schubert [TLSProxy::Message::MT_CERTIFICATE_STATUS, 51e0c4386eSCy Schubert checkhandshake::OCSP_HANDSHAKE], 52e0c4386eSCy Schubert #ServerKeyExchange handshakes not currently supported by TLSProxy 53e0c4386eSCy Schubert [TLSProxy::Message::MT_CERTIFICATE_REQUEST, 54e0c4386eSCy Schubert checkhandshake::CLIENT_AUTH_HANDSHAKE], 55e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO_DONE, 56e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES 57e0c4386eSCy Schubert & ~checkhandshake::RESUME_HANDSHAKE], 58e0c4386eSCy Schubert [TLSProxy::Message::MT_CERTIFICATE, 59e0c4386eSCy Schubert checkhandshake::CLIENT_AUTH_HANDSHAKE], 60e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE, 61e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES 62e0c4386eSCy Schubert & ~checkhandshake::RESUME_HANDSHAKE], 63e0c4386eSCy Schubert [TLSProxy::Message::MT_CERTIFICATE_VERIFY, 64e0c4386eSCy Schubert checkhandshake::CLIENT_AUTH_HANDSHAKE], 65e0c4386eSCy Schubert [TLSProxy::Message::MT_NEXT_PROTO, 66e0c4386eSCy Schubert checkhandshake::NPN_HANDSHAKE], 67e0c4386eSCy Schubert [TLSProxy::Message::MT_FINISHED, 68e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES], 69e0c4386eSCy Schubert [TLSProxy::Message::MT_NEW_SESSION_TICKET, 70e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES 71e0c4386eSCy Schubert & ~checkhandshake::RESUME_HANDSHAKE], 72e0c4386eSCy Schubert [TLSProxy::Message::MT_FINISHED, 73e0c4386eSCy Schubert checkhandshake::ALL_HANDSHAKES], 74e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, 75e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 76e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, 77e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 78e0c4386eSCy Schubert [TLSProxy::Message::MT_CERTIFICATE, 79e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 80e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO_DONE, 81e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 82e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_KEY_EXCHANGE, 83e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 84e0c4386eSCy Schubert [TLSProxy::Message::MT_FINISHED, 85e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 86e0c4386eSCy Schubert [TLSProxy::Message::MT_NEW_SESSION_TICKET, 87e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 88e0c4386eSCy Schubert [TLSProxy::Message::MT_FINISHED, 89e0c4386eSCy Schubert checkhandshake::RENEG_HANDSHAKE], 90e0c4386eSCy Schubert [0, 0] 91e0c4386eSCy Schubert); 92e0c4386eSCy Schubert 93e0c4386eSCy Schubert@extensions = ( 94e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SERVER_NAME, 95e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 96e0c4386eSCy Schubert checkhandshake::SERVER_NAME_CLI_EXTENSION], 97e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST, 98e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 99e0c4386eSCy Schubert checkhandshake::STATUS_REQUEST_CLI_EXTENSION], 100e0c4386eSCy Schubert (disabled("ec") ? () : 101e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, 102e0c4386eSCy Schubert TLSProxy::Message::EXT_SUPPORTED_GROUPS, 103e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 104e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS]), 105e0c4386eSCy Schubert (disabled("ec") ? () : 106e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, 107e0c4386eSCy Schubert TLSProxy::Message::EXT_EC_POINT_FORMATS, 108e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 109e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS]), 110e0c4386eSCy Schubert (disabled("tls1_2") ? () : 111e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SIG_ALGS, 112e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 113e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS]), 114e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ALPN, 115e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 116e0c4386eSCy Schubert checkhandshake::ALPN_CLI_EXTENSION], 117e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SCT, 118e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 119e0c4386eSCy Schubert checkhandshake::SCT_CLI_EXTENSION], 120e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC, 121e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 122e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS], 123e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET, 124e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 125e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS], 126e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SESSION_TICKET, 127e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 128e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS], 129e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_RENEGOTIATE, 130e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 131*e7be843bSPierre Pronchery checkhandshake::DEFAULT_EXTENSIONS], 132e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_NPN, 133e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 134e0c4386eSCy Schubert checkhandshake::NPN_CLI_EXTENSION], 135e0c4386eSCy Schubert [TLSProxy::Message::MT_CLIENT_HELLO, TLSProxy::Message::EXT_SRP, 136e0c4386eSCy Schubert TLSProxy::Message::CLIENT, 137e0c4386eSCy Schubert checkhandshake::SRP_CLI_EXTENSION], 138e0c4386eSCy Schubert 139e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_RENEGOTIATE, 140e0c4386eSCy Schubert TLSProxy::Message::SERVER, 141e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS], 142e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_ENCRYPT_THEN_MAC, 143e0c4386eSCy Schubert TLSProxy::Message::SERVER, 144e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS], 145e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_EXTENDED_MASTER_SECRET, 146e0c4386eSCy Schubert TLSProxy::Message::SERVER, 147e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS], 148e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SESSION_TICKET, 149e0c4386eSCy Schubert TLSProxy::Message::SERVER, 150e0c4386eSCy Schubert checkhandshake::SESSION_TICKET_SRV_EXTENSION], 151e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SERVER_NAME, 152e0c4386eSCy Schubert TLSProxy::Message::SERVER, 153e0c4386eSCy Schubert checkhandshake::SERVER_NAME_SRV_EXTENSION], 154e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_STATUS_REQUEST, 155e0c4386eSCy Schubert TLSProxy::Message::SERVER, 156e0c4386eSCy Schubert checkhandshake::STATUS_REQUEST_SRV_EXTENSION], 157e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_ALPN, 158e0c4386eSCy Schubert TLSProxy::Message::SERVER, 159e0c4386eSCy Schubert checkhandshake::ALPN_SRV_EXTENSION], 160e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_SCT, 161e0c4386eSCy Schubert TLSProxy::Message::SERVER, 162e0c4386eSCy Schubert checkhandshake::SCT_SRV_EXTENSION], 163e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_NPN, 164e0c4386eSCy Schubert TLSProxy::Message::SERVER, 165e0c4386eSCy Schubert checkhandshake::NPN_SRV_EXTENSION], 166e0c4386eSCy Schubert [TLSProxy::Message::MT_SERVER_HELLO, TLSProxy::Message::EXT_EC_POINT_FORMATS, 167e0c4386eSCy Schubert TLSProxy::Message::SERVER, 168e0c4386eSCy Schubert checkhandshake::EC_POINT_FORMAT_SRV_EXTENSION], 169e0c4386eSCy Schubert [0,0,0,0] 170e0c4386eSCy Schubert); 171e0c4386eSCy Schubert 172e0c4386eSCy Schubert#Test 1: Check we get all the right messages for a default handshake 173e0c4386eSCy Schubert(undef, my $session) = tempfile(); 174e0c4386eSCy Schubert$proxy->serverconnects(2); 175*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 176e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -sess_out ".$session); 177e0c4386eSCy Schubert$proxy->start() or plan skip_all => "Unable to start up Proxy for tests"; 178e0c4386eSCy Schubertplan tests => 21; 179e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 180e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 181e0c4386eSCy Schubert "Default handshake test"); 182e0c4386eSCy Schubert 183e0c4386eSCy Schubert#Test 2: Resumption handshake 184e0c4386eSCy Schubert$proxy->clearClient(); 185*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 186e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -sess_in ".$session); 187e0c4386eSCy Schubert$proxy->clientstart(); 188e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::RESUME_HANDSHAKE, 189e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 190e0c4386eSCy Schubert & ~checkhandshake::SESSION_TICKET_SRV_EXTENSION, 191e0c4386eSCy Schubert "Resumption handshake test"); 192e0c4386eSCy Schubertunlink $session; 193e0c4386eSCy Schubert 194e0c4386eSCy SchubertSKIP: { 195e0c4386eSCy Schubert skip "No OCSP support in this OpenSSL build", 3 196e0c4386eSCy Schubert if disabled("ocsp"); 197e0c4386eSCy Schubert 198e0c4386eSCy Schubert #Test 3: A status_request handshake (client request only) 199e0c4386eSCy Schubert $proxy->clear(); 200*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 201e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -status"); 202e0c4386eSCy Schubert $proxy->start(); 203e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 204e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 205e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_CLI_EXTENSION, 206e0c4386eSCy Schubert "status_request handshake test (client)"); 207e0c4386eSCy Schubert 208e0c4386eSCy Schubert #Test 4: A status_request handshake (server support only) 209e0c4386eSCy Schubert $proxy->clear(); 210*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 211e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3"); 212e0c4386eSCy Schubert $proxy->serverflags("-status_file " 213e0c4386eSCy Schubert .srctop_file("test", "recipes", "ocsp-response.der")); 214e0c4386eSCy Schubert $proxy->start(); 215e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 216e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 217e0c4386eSCy Schubert "status_request handshake test (server)"); 218e0c4386eSCy Schubert 219e0c4386eSCy Schubert #Test 5: A status_request handshake (client and server) 220e0c4386eSCy Schubert $proxy->clear(); 221*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 222e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -status"); 223e0c4386eSCy Schubert $proxy->serverflags("-status_file " 224e0c4386eSCy Schubert .srctop_file("test", "recipes", "ocsp-response.der")); 225e0c4386eSCy Schubert $proxy->start(); 226e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE, 227e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 228e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_CLI_EXTENSION 229e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_SRV_EXTENSION, 230e0c4386eSCy Schubert "status_request handshake test"); 231e0c4386eSCy Schubert} 232e0c4386eSCy Schubert 233e0c4386eSCy Schubert#Test 6: A client auth handshake 234e0c4386eSCy Schubert$proxy->clear(); 235*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 236e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -cert ".srctop_file("apps", "server.pem")); 237e0c4386eSCy Schubert$proxy->serverflags("-Verify 5"); 238e0c4386eSCy Schubert$proxy->start(); 239e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::CLIENT_AUTH_HANDSHAKE, 240e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 241e0c4386eSCy Schubert "Client auth handshake test"); 242e0c4386eSCy Schubert 243e0c4386eSCy Schubert#Test 7: A handshake with a renegotiation 244e0c4386eSCy Schubert$proxy->clear(); 245*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 246e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3"); 247e0c4386eSCy Schubert$proxy->serverflags("-client_renegotiation"); 248e0c4386eSCy Schubert$proxy->reneg(1); 249e0c4386eSCy Schubert$proxy->start(); 250e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::RENEG_HANDSHAKE, 251e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 252e0c4386eSCy Schubert "Renegotiation handshake test"); 253e0c4386eSCy Schubert 254e0c4386eSCy Schubert#Test 8: Server name handshake (no client request) 255e0c4386eSCy Schubert$proxy->clear(); 256*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 257e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -noservername"); 258e0c4386eSCy Schubert$proxy->start(); 259e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 260e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 261e0c4386eSCy Schubert & ~checkhandshake::SERVER_NAME_CLI_EXTENSION, 262e0c4386eSCy Schubert "Server name handshake test (client)"); 263e0c4386eSCy Schubert 264e0c4386eSCy Schubert#Test 9: Server name handshake (server support only) 265e0c4386eSCy Schubert$proxy->clear(); 266*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 267e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -noservername"); 268e0c4386eSCy Schubert$proxy->serverflags("-servername testhost"); 269e0c4386eSCy Schubert$proxy->start(); 270e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 271e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 272e0c4386eSCy Schubert & ~checkhandshake::SERVER_NAME_CLI_EXTENSION, 273e0c4386eSCy Schubert "Server name handshake test (server)"); 274e0c4386eSCy Schubert 275e0c4386eSCy Schubert#Test 10: Server name handshake (client and server) 276e0c4386eSCy Schubert$proxy->clear(); 277*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 278e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -servername testhost"); 279e0c4386eSCy Schubert$proxy->serverflags("-servername testhost"); 280e0c4386eSCy Schubert$proxy->start(); 281e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 282e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 283e0c4386eSCy Schubert | checkhandshake::SERVER_NAME_SRV_EXTENSION, 284e0c4386eSCy Schubert "Server name handshake test"); 285e0c4386eSCy Schubert 286e0c4386eSCy Schubert#Test 11: ALPN handshake (client request only) 287e0c4386eSCy Schubert$proxy->clear(); 288*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 289e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -alpn test"); 290e0c4386eSCy Schubert$proxy->start(); 291e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 292e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 293e0c4386eSCy Schubert | checkhandshake::ALPN_CLI_EXTENSION, 294e0c4386eSCy Schubert "ALPN handshake test (client)"); 295e0c4386eSCy Schubert 296e0c4386eSCy Schubert#Test 12: ALPN handshake (server support only) 297e0c4386eSCy Schubert$proxy->clear(); 298*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 299e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3"); 300e0c4386eSCy Schubert$proxy->serverflags("-alpn test"); 301e0c4386eSCy Schubert$proxy->start(); 302e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 303e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 304e0c4386eSCy Schubert "ALPN handshake test (server)"); 305e0c4386eSCy Schubert 306e0c4386eSCy Schubert#Test 13: ALPN handshake (client and server) 307e0c4386eSCy Schubert$proxy->clear(); 308*e7be843bSPierre Pronchery$proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 309e0c4386eSCy Schubert$proxy->clientflags("-no_tls1_3 -alpn test"); 310e0c4386eSCy Schubert$proxy->serverflags("-alpn test"); 311e0c4386eSCy Schubert$proxy->start(); 312e0c4386eSCy Schubertcheckhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 313e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 314e0c4386eSCy Schubert | checkhandshake::ALPN_CLI_EXTENSION 315e0c4386eSCy Schubert | checkhandshake::ALPN_SRV_EXTENSION, 316e0c4386eSCy Schubert "ALPN handshake test"); 317e0c4386eSCy Schubert 318e0c4386eSCy SchubertSKIP: { 319e0c4386eSCy Schubert skip "No CT, EC or OCSP support in this OpenSSL build", 1 320e0c4386eSCy Schubert if disabled("ct") || disabled("ec") || disabled("ocsp"); 321e0c4386eSCy Schubert 322e0c4386eSCy Schubert #Test 14: SCT handshake (client request only) 323e0c4386eSCy Schubert $proxy->clear(); 324*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 325e0c4386eSCy Schubert #Note: -ct also sends status_request 326e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -ct"); 327e0c4386eSCy Schubert $proxy->serverflags("-status_file " 328e0c4386eSCy Schubert .srctop_file("test", "recipes", "ocsp-response.der")); 329e0c4386eSCy Schubert $proxy->start(); 330e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE, 331e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 332e0c4386eSCy Schubert | checkhandshake::SCT_CLI_EXTENSION 333e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_CLI_EXTENSION 334e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_SRV_EXTENSION, 335e0c4386eSCy Schubert "SCT handshake test (client)"); 336e0c4386eSCy Schubert} 337e0c4386eSCy Schubert 338e0c4386eSCy SchubertSKIP: { 339e0c4386eSCy Schubert skip "No OCSP support in this OpenSSL build", 1 340e0c4386eSCy Schubert if disabled("ocsp"); 341e0c4386eSCy Schubert 342e0c4386eSCy Schubert #Test 15: SCT handshake (server support only) 343e0c4386eSCy Schubert $proxy->clear(); 344*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 345e0c4386eSCy Schubert #Note: -ct also sends status_request 346e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3"); 347e0c4386eSCy Schubert $proxy->serverflags("-status_file " 348e0c4386eSCy Schubert .srctop_file("test", "recipes", "ocsp-response.der")); 349e0c4386eSCy Schubert $proxy->start(); 350e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 351e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 352e0c4386eSCy Schubert "SCT handshake test (server)"); 353e0c4386eSCy Schubert} 354e0c4386eSCy Schubert 355e0c4386eSCy SchubertSKIP: { 356e0c4386eSCy Schubert skip "No CT, EC or OCSP support in this OpenSSL build", 1 357e0c4386eSCy Schubert if disabled("ct") || disabled("ec") || disabled("ocsp"); 358e0c4386eSCy Schubert 359e0c4386eSCy Schubert #Test 16: SCT handshake (client and server) 360e0c4386eSCy Schubert #There is no built-in server side support for this so we are actually also 361e0c4386eSCy Schubert #testing custom extensions here 362e0c4386eSCy Schubert $proxy->clear(); 363*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 364e0c4386eSCy Schubert #Note: -ct also sends status_request 365e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -ct"); 366e0c4386eSCy Schubert $proxy->serverflags("-status_file " 367e0c4386eSCy Schubert .srctop_file("test", "recipes", "ocsp-response.der") 368e0c4386eSCy Schubert ." -serverinfo ".srctop_file("test", "serverinfo.pem")); 369e0c4386eSCy Schubert $proxy->start(); 370e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::OCSP_HANDSHAKE, 371e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 372e0c4386eSCy Schubert | checkhandshake::SCT_CLI_EXTENSION 373e0c4386eSCy Schubert | checkhandshake::SCT_SRV_EXTENSION 374e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_CLI_EXTENSION 375e0c4386eSCy Schubert | checkhandshake::STATUS_REQUEST_SRV_EXTENSION, 376e0c4386eSCy Schubert "SCT handshake test"); 377e0c4386eSCy Schubert} 378e0c4386eSCy Schubert 379e0c4386eSCy Schubert 380e0c4386eSCy SchubertSKIP: { 381e0c4386eSCy Schubert skip "No NPN support in this OpenSSL build", 3 382e0c4386eSCy Schubert if disabled("nextprotoneg"); 383e0c4386eSCy Schubert 384e0c4386eSCy Schubert #Test 17: NPN handshake (client request only) 385e0c4386eSCy Schubert $proxy->clear(); 386*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 387e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -nextprotoneg test"); 388e0c4386eSCy Schubert $proxy->start(); 389e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 390e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 391e0c4386eSCy Schubert | checkhandshake::NPN_CLI_EXTENSION, 392e0c4386eSCy Schubert "NPN handshake test (client)"); 393e0c4386eSCy Schubert 394e0c4386eSCy Schubert #Test 18: NPN handshake (server support only) 395e0c4386eSCy Schubert $proxy->clear(); 396*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 397e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3"); 398e0c4386eSCy Schubert $proxy->serverflags("-nextprotoneg test"); 399e0c4386eSCy Schubert $proxy->start(); 400e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 401e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS, 402e0c4386eSCy Schubert "NPN handshake test (server)"); 403e0c4386eSCy Schubert 404e0c4386eSCy Schubert #Test 19: NPN handshake (client and server) 405e0c4386eSCy Schubert $proxy->clear(); 406*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 407e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -nextprotoneg test"); 408e0c4386eSCy Schubert $proxy->serverflags("-nextprotoneg test"); 409e0c4386eSCy Schubert $proxy->start(); 410e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::NPN_HANDSHAKE, 411e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 412e0c4386eSCy Schubert | checkhandshake::NPN_CLI_EXTENSION 413e0c4386eSCy Schubert | checkhandshake::NPN_SRV_EXTENSION, 414e0c4386eSCy Schubert "NPN handshake test"); 415e0c4386eSCy Schubert} 416e0c4386eSCy Schubert 417e0c4386eSCy SchubertSKIP: { 418e0c4386eSCy Schubert skip "No SRP support in this OpenSSL build", 1 419e0c4386eSCy Schubert if disabled("srp"); 420e0c4386eSCy Schubert 421e0c4386eSCy Schubert #Test 20: SRP extension 422e0c4386eSCy Schubert #Note: We are not actually going to perform an SRP handshake (TLSProxy 423e0c4386eSCy Schubert #does not support it). However it is sufficient for us to check that the 424e0c4386eSCy Schubert #SRP extension gets added on the client side. There is no SRP extension 425e0c4386eSCy Schubert #generated on the server side anyway. 426e0c4386eSCy Schubert $proxy->clear(); 427*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 428e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3 -srpuser user -srppass pass:pass"); 429e0c4386eSCy Schubert $proxy->start(); 430e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::DEFAULT_HANDSHAKE, 431e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 432e0c4386eSCy Schubert | checkhandshake::SRP_CLI_EXTENSION, 433e0c4386eSCy Schubert "SRP extension test"); 434e0c4386eSCy Schubert} 435e0c4386eSCy Schubert 436e0c4386eSCy Schubert#Test 21: EC handshake 437e0c4386eSCy SchubertSKIP: { 438e0c4386eSCy Schubert skip "No EC support in this OpenSSL build", 1 if disabled("ec"); 439e0c4386eSCy Schubert $proxy->clear(); 440*e7be843bSPierre Pronchery $proxy->cipherc("DEFAULT:\@SECLEVEL=2"); 441e0c4386eSCy Schubert $proxy->clientflags("-no_tls1_3"); 442e0c4386eSCy Schubert $proxy->serverflags("-no_tls1_3"); 443e0c4386eSCy Schubert $proxy->ciphers("ECDHE-RSA-AES128-SHA"); 444e0c4386eSCy Schubert $proxy->start(); 445e0c4386eSCy Schubert checkhandshake($proxy, checkhandshake::EC_HANDSHAKE, 446e0c4386eSCy Schubert checkhandshake::DEFAULT_EXTENSIONS 447e0c4386eSCy Schubert | checkhandshake::EC_POINT_FORMAT_SRV_EXTENSION, 448e0c4386eSCy Schubert "EC handshake test"); 449e0c4386eSCy Schubert} 450