Update copyright year
[openssl.git] / test / recipes / 80-test_ssl_old.t
1 #! /usr/bin/env perl
2 # Copyright 2015-2021 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 use strict;
11 use warnings;
12
13 use POSIX;
14 use File::Basename;
15 use File::Copy;
16 use OpenSSL::Test qw/:DEFAULT with bldtop_file bldtop_dir srctop_file srctop_dir cmdstr data_file/;
17 use OpenSSL::Test::Utils;
18
19 BEGIN {
20 setup("test_ssl_old");
21 }
22
23 use lib srctop_dir('Configurations');
24 use lib bldtop_dir('.');
25 use platform;
26
27 my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
28 my $infile = bldtop_file('providers', platform->dso('fips'));
29
30 my ($no_rsa, $no_dsa, $no_dh, $no_ec, $no_psk,
31     $no_ssl3, $no_tls1, $no_tls1_1, $no_tls1_2, $no_tls1_3,
32     $no_dtls, $no_dtls1, $no_dtls1_2, $no_ct) =
33     anydisabled qw/rsa dsa dh ec psk
34                    ssl3 tls1 tls1_1 tls1_2 tls1_3
35                    dtls dtls1 dtls1_2 ct/;
36 my $no_anytls = alldisabled(available_protocols("tls"));
37 my $no_anydtls = alldisabled(available_protocols("dtls"));
38
39 plan skip_all => "No SSL/TLS/DTLS protocol is support by this OpenSSL build"
40     if $no_anytls && $no_anydtls;
41
42 my $digest = "-sha1";
43 my @reqcmd = ("openssl", "req");
44 my @x509cmd = ("openssl", "x509", $digest);
45 my @verifycmd = ("openssl", "verify");
46 my @genpkeycmd = ("openssl", "genpkey");
47 my $dummycnf = srctop_file("apps", "openssl.cnf");
48
49 my $cnf = srctop_file("test", "ca-and-certs.cnf");
50 my $CAkey = "keyCA.ss";
51 my $CAcert="certCA.ss";
52 my $CAserial="certCA.srl";
53 my $CAreq="reqCA.ss";
54 my $CAreq2="req2CA.ss"; # temp
55 my $Ukey="keyU.ss";
56 my $Ureq="reqU.ss";
57 my $Ucert="certU.ss";
58 my $Dkey="keyD.ss";
59 my $Dreq="reqD.ss";
60 my $Dcert="certD.ss";
61 my $Ekey="keyE.ss";
62 my $Ereq="reqE.ss";
63 my $Ecert="certE.ss";
64
65 my $proxycnf=srctop_file("test", "proxy.cnf");
66 my $P1key="keyP1.ss";
67 my $P1req="reqP1.ss";
68 my $P1cert="certP1.ss";
69 my $P1intermediate="tmp_intP1.ss";
70 my $P2key="keyP2.ss";
71 my $P2req="reqP2.ss";
72 my $P2cert="certP2.ss";
73 my $P2intermediate="tmp_intP2.ss";
74
75 my $server_sess="server.ss";
76 my $client_sess="client.ss";
77
78 # ssl_old_test.c is deprecated in favour of the new framework in ssl_test.c
79 # If you're adding tests here, you probably want to convert them to the
80 # new format in ssl_test.c and add recipes to 80-test_ssl_new.t instead.
81 plan tests =>
82    ($no_fips ? 0 : 1 + 5) # For fipsinstall + testssl with fips provider
83     + 1                   # For testss
84     + 5                   # For the testssl with default provider
85     ;
86
87 unless ($no_fips) {
88     ok(run(app(['openssl', 'fipsinstall',
89                 '-out', bldtop_file('providers', 'fipsmodule.cnf'),
90                 '-module', $infile])),
91        "fipsinstall");
92 }
93
94 subtest 'test_ss' => sub {
95     if (testss()) {
96         open OUT, ">", "intP1.ss";
97         copy($CAcert, \*OUT); copy($Ucert, \*OUT);
98         close OUT;
99
100         open OUT, ">", "intP2.ss";
101         copy($CAcert, \*OUT); copy($Ucert, \*OUT); copy($P1cert, \*OUT);
102         close OUT;
103     }
104 };
105
106 note('test_ssl_old -- key U');
107 my $configfile = srctop_file("test","default-and-legacy.cnf");
108 if (disabled("legacy")) {
109     $configfile = srctop_file("test","default.cnf");
110 }
111
112 testssl($Ukey, $Ucert, $CAcert, "default", $configfile);
113 unless ($no_fips) {
114     testssl($Ukey, $Ucert, $CAcert, "fips",
115             srctop_file("test","fips-and-base.cnf"));
116 }
117
118 # -----------
119 # subtest functions
120 sub testss {
121     my @req_dsa = ("-newkey",
122                    "dsa:".data_file("dsa2048.pem"));
123     my $dsaparams = data_file("dsa2048.pem");
124     my @req_new;
125     if ($no_rsa) {
126         @req_new = @req_dsa;
127     } else {
128         @req_new = ("-new");
129     }
130
131     plan tests => 17;
132
133   SKIP: {
134       skip 'failure', 16 unless
135           ok(run(app([@reqcmd, "-config", $cnf,
136                       "-out", $CAreq, "-keyout", $CAkey,
137                       @req_new])),
138              'make cert request');
139
140       skip 'failure', 15 unless
141           ok(run(app([@x509cmd, "-CAcreateserial", "-in", $CAreq, "-days", "30",
142                       "-req", "-out", $CAcert, "-signkey", $CAkey,
143                       "-extfile", $cnf, "-extensions", "v3_ca"],
144                      stdout => "err.ss")),
145              'convert request into self-signed cert');
146
147       skip 'failure', 14 unless
148           ok(run(app([@x509cmd, "-in", $CAcert,
149                       "-x509toreq", "-signkey", $CAkey, "-out", $CAreq2],
150                      stdout => "err.ss")),
151              'convert cert into a cert request');
152
153       skip 'failure', 13 unless
154           ok(run(app([@reqcmd, "-config", $dummycnf,
155                       "-verify", "-in", $CAreq, "-noout"])),
156              'verify request 1');
157
158
159       skip 'failure', 12 unless
160           ok(run(app([@reqcmd, "-config", $dummycnf,
161                       "-verify", "-in", $CAreq2, "-noout"])),
162              'verify request 2');
163
164       skip 'failure', 11 unless
165           ok(run(app([@verifycmd, "-CAfile", $CAcert, $CAcert])),
166              'verify signature');
167
168       skip 'failure', 10 unless
169           ok(run(app([@reqcmd, "-config", $cnf, "-section", "userreq",
170                       "-out", $Ureq, "-keyout", $Ukey, @req_new],
171                      stdout => "err.ss")),
172              'make a user cert request');
173
174       skip 'failure', 9 unless
175           ok(run(app([@x509cmd, "-CAcreateserial", "-in", $Ureq, "-days", "30",
176                       "-req", "-out", $Ucert,
177                       "-CA", $CAcert, "-CAkey", $CAkey, "-CAserial", $CAserial,
178                       "-extfile", $cnf, "-extensions", "v3_ee"],
179                      stdout => "err.ss"))
180              && run(app([@verifycmd, "-CAfile", $CAcert, $Ucert])),
181              'sign user cert request');
182
183       skip 'failure', 8 unless
184           ok(run(app([@x509cmd,
185                       "-subject", "-issuer", "-startdate", "-enddate",
186                       "-noout", "-in", $Ucert])),
187              'Certificate details');
188
189       skip 'failure', 7 unless
190           subtest 'DSA certificate creation' => sub {
191               plan skip_all => "skipping DSA certificate creation"
192                   if $no_dsa;
193
194               plan tests => 5;
195
196             SKIP: {
197                 $ENV{CN2} = "DSA Certificate";
198                 skip 'failure', 4 unless
199                     ok(run(app([@genpkeycmd, "-out", $Dkey,
200                                 "-paramfile", $dsaparams],
201                                stdout => "err.ss")),
202                        "make a DSA key");
203                 skip 'failure', 3 unless
204                     ok(run(app([@reqcmd, "-new", "-config", $cnf,
205                                 "-section", "userreq",
206                                 "-out", $Dreq, "-key", $Dkey],
207                                stdout => "err.ss")),
208                        "make a DSA user cert request");
209                 skip 'failure', 2 unless
210                     ok(run(app([@x509cmd, "-CAcreateserial",
211                                 "-in", $Dreq,
212                                 "-days", "30",
213                                 "-req",
214                                 "-out", $Dcert,
215                                 "-CA", $CAcert, "-CAkey", $CAkey,
216                                 "-CAserial", $CAserial,
217                                 "-extfile", $cnf,
218                                 "-extensions", "v3_ee_dsa"],
219                                stdout => "err.ss")),
220                        "sign DSA user cert request");
221                 skip 'failure', 1 unless
222                     ok(run(app([@verifycmd, "-CAfile", $CAcert, $Dcert])),
223                        "verify DSA user cert");
224                 skip 'failure', 0 unless
225                     ok(run(app([@x509cmd,
226                                 "-subject", "-issuer",
227                                 "-startdate", "-enddate", "-noout",
228                                 "-in", $Dcert])),
229                        "DSA Certificate details");
230               }
231       };
232
233       skip 'failure', 6 unless
234           subtest 'ECDSA/ECDH certificate creation' => sub {
235               plan skip_all => "skipping ECDSA/ECDH certificate creation"
236                   if $no_ec;
237
238               plan tests => 5;
239
240             SKIP: {
241                 $ENV{CN2} = "ECDSA Certificate";
242                 skip 'failure', 4 unless
243                     ok(run(app(["openssl", "genpkey", "-genparam",
244                                 "-algorithm", "EC",
245                                 "-pkeyopt", "ec_paramgen_curve:P-256",
246                                 "-pkeyopt", "ec_param_enc:named_curve",
247                                 "-out", "ecp.ss"])),
248                        "make EC parameters");
249                 skip 'failure', 3 unless
250                     ok(run(app([@reqcmd, "-config", $cnf,
251                                 "-section", "userreq",
252                                 "-out", $Ereq, "-keyout", $Ekey,
253                                 "-newkey", "ec:ecp.ss"],
254                                stdout => "err.ss")),
255                        "make a ECDSA/ECDH user cert request");
256                 skip 'failure', 2 unless
257                     ok(run(app([@x509cmd, "-CAcreateserial",
258                                 "-in", $Ereq,
259                                 "-days", "30",
260                                 "-req",
261                                 "-out", $Ecert,
262                                 "-CA", $CAcert, "-CAkey", $CAkey,
263                                 "-CAserial", $CAserial,
264                                 "-extfile", $cnf,
265                                 "-extensions", "v3_ee_ec"],
266                                stdout => "err.ss")),
267                        "sign ECDSA/ECDH user cert request");
268                 skip 'failure', 1 unless
269                     ok(run(app([@verifycmd, "-CAfile", $CAcert, $Ecert])),
270                        "verify ECDSA/ECDH user cert");
271                 skip 'failure', 0 unless
272                     ok(run(app([@x509cmd,
273                                 "-subject", "-issuer",
274                                 "-startdate", "-enddate", "-noout",
275                                 "-in", $Ecert])),
276                        "ECDSA Certificate details");
277               }
278       };
279
280       skip 'failure', 5 unless
281           ok(run(app([@reqcmd, "-config", $proxycnf,
282                       "-out", $P1req, "-keyout", $P1key, @req_new],
283                      stdout => "err.ss")),
284              'make a proxy cert request');
285
286
287       skip 'failure', 4 unless
288           ok(run(app([@x509cmd, "-CAcreateserial", "-in", $P1req, "-days", "30",
289                       "-req", "-out", $P1cert,
290                       "-CA", $Ucert, "-CAkey", $Ukey,
291                       "-extfile", $proxycnf, "-extensions", "proxy"],
292                      stdout => "err.ss")),
293              'sign proxy with user cert');
294
295       copy($Ucert, $P1intermediate);
296       run(app([@verifycmd, "-CAfile", $CAcert,
297                "-untrusted", $P1intermediate, $P1cert]));
298       ok(run(app([@x509cmd,
299                   "-subject", "-issuer", "-startdate", "-enddate",
300                   "-noout", "-in", $P1cert])),
301          'Certificate details');
302
303       skip 'failure', 2 unless
304           ok(run(app([@reqcmd, "-config", $proxycnf, "-section", "proxy2_req",
305                       "-out", $P2req, "-keyout", $P2key,
306                       @req_new],
307                      stdout => "err.ss")),
308              'make another proxy cert request');
309
310
311       skip 'failure', 1 unless
312           ok(run(app([@x509cmd, "-CAcreateserial", "-in", $P2req, "-days", "30",
313                       "-req", "-out", $P2cert,
314                       "-CA", $P1cert, "-CAkey", $P1key,
315                       "-extfile", $proxycnf, "-extensions", "proxy_2"],
316                      stdout => "err.ss")),
317              'sign second proxy cert request with the first proxy cert');
318
319
320       open OUT, ">", $P2intermediate;
321       copy($Ucert, \*OUT); copy($P1cert, \*OUT);
322       close OUT;
323       run(app([@verifycmd, "-CAfile", $CAcert,
324                "-untrusted", $P2intermediate, $P2cert]));
325       ok(run(app([@x509cmd,
326                   "-subject", "-issuer", "-startdate", "-enddate",
327                   "-noout", "-in", $P2cert])),
328          'Certificate details');
329     }
330 }
331
332 sub testssl {
333     my ($key, $cert, $CAtmp, $provider, $configfile) = @_;
334     my @CA = $CAtmp ? ("-CAfile", $CAtmp) : ("-CApath", bldtop_dir("certs"));
335     my @providerflags = ("-provider", $provider);
336
337     if ($provider eq "default" && !disabled("legacy")) {
338         push @providerflags, "-provider", "legacy";
339     }
340
341     my @ssltest = ("ssl_old_test",
342                    "-s_key", $key, "-s_cert", $cert,
343                    "-c_key", $key, "-c_cert", $cert,
344                    "-config", $configfile,
345                    @providerflags);
346
347
348     my $serverinfo = srctop_file("test","serverinfo.pem");
349
350     my $dsa_cert = 0;
351     if (grep /DSA Public Key/, run(app(["openssl", "x509", "-in", $cert,
352                                         "-text", "-noout"]), capture => 1)) {
353         $dsa_cert = 1;
354     }
355
356
357     # plan tests => 11;
358
359     subtest 'standard SSL tests' => sub {
360         ######################################################################
361       plan tests => 13;
362
363       SKIP: {
364           skip "SSLv3 is not supported by this OpenSSL build", 4
365               if disabled("ssl3");
366
367           skip "SSLv3 is not supported by the FIPS provider", 4
368               if $provider eq "fips";
369
370           ok(run(test([@ssltest, "-bio_pair", "-ssl3"])),
371              'test sslv3 via BIO pair');
372           ok(run(test([@ssltest, "-bio_pair", "-ssl3", "-server_auth", @CA])),
373              'test sslv3 with server authentication via BIO pair');
374           ok(run(test([@ssltest, "-bio_pair", "-ssl3", "-client_auth", @CA])),
375              'test sslv3 with client authentication via BIO pair');
376           ok(run(test([@ssltest, "-bio_pair", "-ssl3", "-server_auth", "-client_auth", @CA])),
377              'test sslv3 with both server and client authentication via BIO pair');
378         }
379
380       SKIP: {
381           skip "Neither SSLv3 nor any TLS version are supported by this OpenSSL build", 1
382               if $no_anytls;
383
384           ok(run(test([@ssltest, "-bio_pair"])),
385              'test sslv2/sslv3 via BIO pair');
386         }
387
388       SKIP: {
389           skip "Neither SSLv3 nor any TLS version are supported by this OpenSSL build", 8
390               if $no_anytls;
391
392         SKIP: {
393             skip "skipping test of sslv2/sslv3 w/o (EC)DHE test", 1 if $dsa_cert;
394
395             ok(run(test([@ssltest, "-bio_pair", "-no_dhe", "-no_ecdhe"])),
396                'test sslv2/sslv3 w/o (EC)DHE via BIO pair');
397           }
398
399         SKIP: {
400             skip "skipping dhe1024dsa test", 1
401                 if ($no_dh);
402
403             ok(run(test([@ssltest, "-bio_pair", "-dhe1024dsa", "-v"])),
404                'test sslv2/sslv3 with 1024bit DHE via BIO pair');
405           }
406
407           ok(run(test([@ssltest, "-bio_pair", "-server_auth", @CA])),
408              'test sslv2/sslv3 with server authentication');
409           ok(run(test([@ssltest, "-bio_pair", "-client_auth", @CA])),
410              'test sslv2/sslv3 with client authentication via BIO pair');
411           ok(run(test([@ssltest, "-bio_pair", "-server_auth", "-client_auth", @CA])),
412              'test sslv2/sslv3 with both client and server authentication via BIO pair');
413           ok(run(test([@ssltest, "-bio_pair", "-server_auth", "-client_auth", "-app_verify", @CA])),
414              'test sslv2/sslv3 with both client and server authentication via BIO pair and app verify');
415
416         SKIP: {
417             skip "No IPv4 available on this machine", 1
418                 unless !disabled("sock") && have_IPv4();
419             ok(run(test([@ssltest, "-ipv4"])),
420                'test TLS via IPv4');
421           }
422
423         SKIP: {
424             skip "No IPv6 available on this machine", 1
425                 unless !disabled("sock") && have_IPv6();
426             ok(run(test([@ssltest, "-ipv6"])),
427                'test TLS via IPv6');
428           }
429         }
430     };
431
432     subtest "Testing ciphersuites" => sub {
433
434         my @exkeys = ();
435         my $ciphers = '-PSK:-SRP:@SECLEVEL=0';
436
437         if (!$no_dsa) {
438             push @exkeys, "-s_cert", "certD.ss", "-s_key", "keyD.ss";
439         }
440
441         if (!$no_ec) {
442             push @exkeys, "-s_cert", "certE.ss", "-s_key", "keyE.ss";
443         }
444
445         my @protocols = ();
446         # We only use the flags that ssl_old_test understands
447         push @protocols, "-tls1_3" unless $no_tls1_3;
448         push @protocols, "-tls1_2" unless $no_tls1_2;
449         push @protocols, "-tls1" unless $no_tls1 || $provider eq "fips";
450         push @protocols, "-ssl3" unless $no_ssl3 || $provider eq "fips";
451         my $protocolciphersuitecount = 0;
452         my %ciphersuites = ();
453         my %ciphersstatus = ();
454         #There's no "-config" option to the ciphers command so we set the
455         #environment variable instead
456         my $opensslconf = $ENV{OPENSSL_CONF};
457         $ENV{OPENSSL_CONF} = $configfile;
458         foreach my $protocol (@protocols) {
459             my $ciphersstatus = undef;
460             my @ciphers = run(app(["openssl", "ciphers", "-s", $protocol,
461                                    @providerflags,
462                                    "ALL:$ciphers"]),
463                                    capture => 1, statusvar => \$ciphersstatus);
464             $ciphersstatus{$protocol} = $ciphersstatus;
465             if ($ciphersstatus) {
466                 $ciphersuites{$protocol} = [ map { s|\R||; split(/:/, $_) }
467                                     @ciphers ];
468                 $protocolciphersuitecount += scalar @{$ciphersuites{$protocol}};
469             }
470         }
471         $ENV{OPENSSL_CONF} = $opensslconf;
472
473         plan skip_all => "None of the ciphersuites to test are available in this OpenSSL build"
474             if $protocolciphersuitecount + scalar(keys %ciphersuites) == 0;
475
476         # The count of protocols is because in addition to the ciphersuites
477         # we got above, we're running a weak DH test for each protocol (except
478         # TLSv1.3)
479         my $testcount = scalar(@protocols) + $protocolciphersuitecount
480                         + scalar(keys %ciphersuites);
481         $testcount-- unless $no_tls1_3;
482         plan tests => $testcount;
483
484         foreach my $protocol (@protocols) {
485             ok($ciphersstatus{$protocol}, "Getting ciphers for $protocol");
486         }
487
488         foreach my $protocol (sort keys %ciphersuites) {
489             note "Testing ciphersuites for $protocol";
490             # ssl_old_test doesn't know -tls1_3, but that's fine, since that's
491             # the default choice if TLSv1.3 enabled
492             my $flag = $protocol eq "-tls1_3" ? "" : $protocol;
493             my $ciphersuites = "";
494             foreach my $cipher (@{$ciphersuites{$protocol}}) {
495                 if ($protocol eq "-ssl3" && $cipher =~ /ECDH/ ) {
496                     note "*****SKIPPING $protocol $cipher";
497                     ok(1);
498                 } else {
499                     if ($protocol eq "-tls1_3") {
500                         $ciphersuites = $cipher;
501                         $cipher = "";
502                     } else {
503                         $cipher = $cipher.':@SECLEVEL=0';
504                     }
505                     ok(run(test([@ssltest, @exkeys, "-cipher",
506                                  $cipher,
507                                  "-ciphersuites", $ciphersuites,
508                                  $flag || ()])),
509                        "Testing $cipher");
510                 }
511             }
512             next if $protocol eq "-tls1_3";
513
514           SKIP: {
515               skip "skipping dhe512 test", 1
516                   if ($no_dh);
517
518               is(run(test([@ssltest,
519                            "-s_cipher", "EDH",
520                            "-c_cipher", 'EDH:@SECLEVEL=1',
521                            "-dhe512",
522                            $protocol])), 0,
523                  "testing connection with weak DH, expecting failure");
524             }
525         }
526     };
527
528     subtest 'RSA/(EC)DHE/PSK tests' => sub {
529         ######################################################################
530
531         plan tests => 5;
532
533       SKIP: {
534           skip "TLSv1.0 is not supported by this OpenSSL build", 5
535               if $no_tls1 || $provider eq "fips";
536
537         SKIP: {
538             skip "skipping anonymous DH tests", 1
539               if ($no_dh);
540
541             ok(run(test([@ssltest, "-v", "-bio_pair", "-tls1", "-cipher", "ADH", "-dhe1024dsa", "-num", "10", "-f", "-time"])),
542                'test tlsv1 with 1024bit anonymous DH, multiple handshakes');
543           }
544
545         SKIP: {
546             skip "skipping RSA tests", 2
547                 if $no_rsa;
548
549             ok(run(test(["ssl_old_test", "-provider", "default", "-v", "-bio_pair", "-tls1", "-s_cert", srctop_file("apps","server2.pem"), "-no_dhe", "-no_ecdhe", "-num", "10", "-f", "-time"])),
550                'test tlsv1 with 1024bit RSA, no (EC)DHE, multiple handshakes');
551
552             skip "skipping RSA+DHE tests", 1
553                 if $no_dh;
554
555             ok(run(test(["ssl_old_test", "-provider", "default", "-v", "-bio_pair", "-tls1", "-s_cert", srctop_file("apps","server2.pem"), "-dhe1024dsa", "-num", "10", "-f", "-time"])),
556                'test tlsv1 with 1024bit RSA, 1024bit DHE, multiple handshakes');
557           }
558
559         SKIP: {
560             skip "skipping PSK tests", 2
561                 if ($no_psk);
562
563             ok(run(test([@ssltest, "-tls1", "-cipher", "PSK", "-psk", "abc123"])),
564                'test tls1 with PSK');
565
566             ok(run(test([@ssltest, "-bio_pair", "-tls1", "-cipher", "PSK", "-psk", "abc123"])),
567                'test tls1 with PSK via BIO pair');
568           }
569         }
570
571     };
572
573     subtest 'Custom Extension tests' => sub {
574         ######################################################################
575
576         plan tests => 1;
577
578       SKIP: {
579           skip "TLSv1.0 is not supported by this OpenSSL build", 1
580               if $no_tls1 || $provider eq "fips";
581
582           ok(run(test([@ssltest, "-bio_pair", "-tls1", "-custom_ext"])),
583              'test tls1 with custom extensions');
584         }
585     };
586
587     subtest 'Serverinfo tests' => sub {
588         ######################################################################
589
590         plan tests => 5;
591
592       SKIP: {
593           skip "TLSv1.0 is not supported by this OpenSSL build", 5
594               if $no_tls1 || $provider eq "fips";
595
596           note('echo test tls1 with serverinfo');
597           ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo])));
598           ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo, "-serverinfo_sct"])));
599           ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo, "-serverinfo_tack"])));
600           ok(run(test([@ssltest, "-bio_pair", "-tls1", "-serverinfo_file", $serverinfo, "-serverinfo_sct", "-serverinfo_tack"])));
601           ok(run(test([@ssltest, "-bio_pair", "-tls1", "-custom_ext", "-serverinfo_file", $serverinfo, "-serverinfo_sct", "-serverinfo_tack"])));
602         }
603     };
604 }