1# -*- mode: perl; -*- 2# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the Apache License 2.0 (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9 10## Test NPN. Note that NPN is only supported up to TLSv1.2 11 12use strict; 13use warnings; 14 15package ssltests; 16 17our @tests = ( 18 { 19 name => "npn-simple", 20 server => { 21 extra => { 22 "NPNProtocols" => "foo", 23 }, 24 }, 25 client => { 26 extra => { 27 "NPNProtocols" => "foo", 28 }, 29 "MaxProtocol" => "TLSv1.2" 30 }, 31 test => { 32 "ExpectedNPNProtocol" => "foo", 33 }, 34 }, 35 { 36 name => "npn-client-finds-match", 37 server => { 38 extra => { 39 "NPNProtocols" => "baz,bar", 40 }, 41 }, 42 client => { 43 extra => { 44 "NPNProtocols" => "foo,bar", 45 }, 46 "MaxProtocol" => "TLSv1.2" 47 }, 48 test => { 49 "ExpectedNPNProtocol" => "bar", 50 }, 51 }, 52 { 53 name => "npn-client-honours-server-pref", 54 server => { 55 extra => { 56 "NPNProtocols" => "bar,foo", 57 }, 58 }, 59 client => { 60 extra => { 61 "NPNProtocols" => "foo,bar", 62 }, 63 "MaxProtocol" => "TLSv1.2" 64 }, 65 test => { 66 "ExpectedNPNProtocol" => "bar", 67 }, 68 }, 69 { 70 name => "npn-client-first-pref-on-mismatch", 71 server => { 72 extra => { 73 "NPNProtocols" => "baz", 74 }, 75 }, 76 client => { 77 extra => { 78 "NPNProtocols" => "foo,bar", 79 }, 80 "MaxProtocol" => "TLSv1.2" 81 }, 82 test => { 83 "ExpectedNPNProtocol" => "foo", 84 }, 85 }, 86 { 87 name => "npn-no-server-support", 88 server => {}, 89 client => { 90 extra => { 91 "NPNProtocols" => "foo", 92 }, 93 "MaxProtocol" => "TLSv1.2" 94 }, 95 test => { 96 "ExpectedNPNProtocol" => undef, 97 }, 98 }, 99 { 100 name => "npn-no-client-support", 101 server => { 102 extra => { 103 "NPNProtocols" => "foo", 104 }, 105 }, 106 client => { 107 "MaxProtocol" => "TLSv1.2" 108 }, 109 test => { 110 "ExpectedNPNProtocol" => undef, 111 }, 112 }, 113 { 114 name => "npn-with-sni-no-context-switch", 115 server => { 116 extra => { 117 "NPNProtocols" => "foo", 118 "ServerNameCallback" => "IgnoreMismatch", 119 }, 120 }, 121 server2 => { 122 extra => { 123 "NPNProtocols" => "bar", 124 }, 125 }, 126 client => { 127 extra => { 128 "NPNProtocols" => "foo,bar", 129 "ServerName" => "server1", 130 }, 131 "MaxProtocol" => "TLSv1.2" 132 }, 133 test => { 134 "ExpectedServerName" => "server1", 135 "ExpectedNPNProtocol" => "foo", 136 }, 137 }, 138 { 139 name => "npn-with-sni-context-switch", 140 server => { 141 extra => { 142 "NPNProtocols" => "foo", 143 "ServerNameCallback" => "IgnoreMismatch", 144 }, 145 }, 146 server2 => { 147 extra => { 148 "NPNProtocols" => "bar", 149 }, 150 }, 151 client => { 152 extra => { 153 "NPNProtocols" => "foo,bar", 154 "ServerName" => "server2", 155 }, 156 "MaxProtocol" => "TLSv1.2" 157 }, 158 test => { 159 "ExpectedServerName" => "server2", 160 "ExpectedNPNProtocol" => "bar", 161 }, 162 }, 163 { 164 name => "npn-selected-sni-server-supports-npn", 165 server => { 166 extra => { 167 "ServerNameCallback" => "IgnoreMismatch", 168 }, 169 }, 170 server2 => { 171 extra => { 172 "NPNProtocols" => "bar", 173 }, 174 }, 175 client => { 176 extra => { 177 "NPNProtocols" => "foo,bar", 178 "ServerName" => "server2", 179 }, 180 "MaxProtocol" => "TLSv1.2" 181 }, 182 test => { 183 "ExpectedServerName" => "server2", 184 "ExpectedNPNProtocol" => "bar", 185 }, 186 }, 187 { 188 name => "npn-selected-sni-server-does-not-support-npn", 189 server => { 190 extra => { 191 "NPNProtocols" => "bar", 192 "ServerNameCallback" => "IgnoreMismatch", 193 }, 194 }, 195 server2 => { }, 196 client => { 197 extra => { 198 "NPNProtocols" => "foo,bar", 199 "ServerName" => "server2", 200 }, 201 "MaxProtocol" => "TLSv1.2" 202 }, 203 test => { 204 "ExpectedServerName" => "server2", 205 "ExpectedNPNProtocol" => undef, 206 }, 207 }, 208 { 209 name => "alpn-preferred-over-npn", 210 server => { 211 extra => { 212 "ALPNProtocols" => "foo", 213 "NPNProtocols" => "bar", 214 }, 215 }, 216 client => { 217 extra => { 218 "ALPNProtocols" => "foo", 219 "NPNProtocols" => "bar", 220 }, 221 "MaxProtocol" => "TLSv1.2" 222 }, 223 test => { 224 "ExpectedALPNProtocol" => "foo", 225 "ExpectedNPNProtocol" => undef, 226 }, 227 }, 228 { 229 name => "sni-npn-preferred-over-alpn", 230 server => { 231 extra => { 232 "ServerNameCallback" => "IgnoreMismatch", 233 "ALPNProtocols" => "foo", 234 }, 235 }, 236 server2 => { 237 extra => { 238 "NPNProtocols" => "bar", 239 }, 240 }, 241 client => { 242 extra => { 243 "ServerName" => "server2", 244 "ALPNProtocols" => "foo", 245 "NPNProtocols" => "bar", 246 }, 247 "MaxProtocol" => "TLSv1.2" 248 }, 249 test => { 250 "ExpectedALPNProtocol" => undef, 251 "ExpectedNPNProtocol" => "bar", 252 "ExpectedServerName" => "server2", 253 }, 254 }, 255 { 256 name => "npn-simple-resumption", 257 server => { 258 extra => { 259 "NPNProtocols" => "foo", 260 }, 261 }, 262 client => { 263 extra => { 264 "NPNProtocols" => "foo", 265 }, 266 "MaxProtocol" => "TLSv1.2" 267 }, 268 test => { 269 "HandshakeMode" => "Resume", 270 "ResumptionExpected" => "Yes", 271 "ExpectedNPNProtocol" => "foo", 272 }, 273 }, 274 { 275 name => "npn-server-switch-resumption", 276 server => { 277 extra => { 278 "NPNProtocols" => "bar,foo", 279 }, 280 }, 281 resume_server => { 282 extra => { 283 "NPNProtocols" => "baz,foo", 284 }, 285 }, 286 client => { 287 extra => { 288 "NPNProtocols" => "foo,bar,baz", 289 }, 290 "MaxProtocol" => "TLSv1.2" 291 }, 292 test => { 293 "HandshakeMode" => "Resume", 294 "ResumptionExpected" => "Yes", 295 "ExpectedNPNProtocol" => "baz", 296 }, 297 }, 298 { 299 name => "npn-client-switch-resumption", 300 server => { 301 extra => { 302 "NPNProtocols" => "foo,bar,baz", 303 }, 304 }, 305 client => { 306 extra => { 307 "NPNProtocols" => "foo,baz", 308 }, 309 "MaxProtocol" => "TLSv1.2" 310 }, 311 resume_client => { 312 extra => { 313 "NPNProtocols" => "bar,baz", 314 }, 315 "MaxProtocol" => "TLSv1.2" 316 }, 317 test => { 318 "HandshakeMode" => "Resume", 319 "ResumptionExpected" => "Yes", 320 "ExpectedNPNProtocol" => "bar", 321 }, 322 }, 323 { 324 name => "npn-client-first-pref-on-mismatch-resumption", 325 server => { 326 extra => { 327 "NPNProtocols" => "bar", 328 }, 329 }, 330 resume_server => { 331 extra => { 332 "NPNProtocols" => "baz", 333 }, 334 }, 335 client => { 336 extra => { 337 "NPNProtocols" => "foo,bar", 338 }, 339 "MaxProtocol" => "TLSv1.2" 340 }, 341 test => { 342 "HandshakeMode" => "Resume", 343 "ResumptionExpected" => "Yes", 344 "ExpectedNPNProtocol" => "foo", 345 }, 346 }, 347 { 348 name => "npn-no-server-support-resumption", 349 server => { 350 extra => { 351 "NPNProtocols" => "foo", 352 }, 353 }, 354 resume_server => { }, 355 client => { 356 extra => { 357 "NPNProtocols" => "foo", 358 }, 359 "MaxProtocol" => "TLSv1.2" 360 }, 361 test => { 362 "HandshakeMode" => "Resume", 363 "ResumptionExpected" => "Yes", 364 "ExpectedNPNProtocol" => undef, 365 }, 366 }, 367 { 368 name => "npn-no-client-support-resumption", 369 server => { 370 extra => { 371 "NPNProtocols" => "foo", 372 }, 373 }, 374 client => { 375 extra => { 376 "NPNProtocols" => "foo", 377 }, 378 "MaxProtocol" => "TLSv1.2" 379 }, 380 resume_client => { 381 "MaxProtocol" => "TLSv1.2" 382 }, 383 test => { 384 "HandshakeMode" => "Resume", 385 "ResumptionExpected" => "Yes", 386 "ExpectedNPNProtocol" => undef, 387 }, 388 }, 389 { 390 name => "alpn-preferred-over-npn-resumption", 391 server => { 392 extra => { 393 "NPNProtocols" => "bar", 394 }, 395 }, 396 resume_server => { 397 extra => { 398 "ALPNProtocols" => "foo", 399 "NPNProtocols" => "baz", 400 }, 401 }, 402 client => { 403 extra => { 404 "ALPNProtocols" => "foo", 405 "NPNProtocols" => "bar,baz", 406 }, 407 "MaxProtocol" => "TLSv1.2" 408 }, 409 test => { 410 "HandshakeMode" => "Resume", 411 "ResumptionExpected" => "Yes", 412 "ExpectedALPNProtocol" => "foo", 413 "ExpectedNPNProtocol" => undef, 414 }, 415 }, 416 { 417 name => "npn-used-if-alpn-not-supported-resumption", 418 server => { 419 extra => { 420 "ALPNProtocols" => "foo", 421 "NPNProtocols" => "bar", 422 }, 423 }, 424 resume_server => { 425 extra => { 426 "NPNProtocols" => "baz", 427 }, 428 }, 429 client => { 430 extra => { 431 "ALPNProtocols" => "foo", 432 "NPNProtocols" => "bar,baz", 433 }, 434 "MaxProtocol" => "TLSv1.2" 435 }, 436 test => { 437 "HandshakeMode" => "Resume", 438 "ResumptionExpected" => "Yes", 439 "ExpectedALPNProtocol" => undef, 440 "ExpectedNPNProtocol" => "baz", 441 }, 442 }, 443); 444