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