annotate ssl_sni.t @ 1585:bff287fbf347

Tests: added proxy_cookie_domain/path tests with "off" parameter.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 23 Jul 2020 12:17:39 +0300
parents 144c6ce732e4
children db6fd9184fa0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
1 #!/usr/bin/perl
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
2
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
4 # (C) Valentin Bartenev
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
5
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
6 # Tests for Server Name Indication (SNI) TLS extension
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
7
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
8 ###############################################################################
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
9
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
10 use warnings;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
11 use strict;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
12
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
13 use Test::More;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
14
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
16
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
17 use lib 'lib';
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
18 use Test::Nginx;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
19
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
20 ###############################################################################
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
21
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
24
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http http_ssl sni rewrite/)
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
26 ->has_daemon('openssl')
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
28
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
30
249
6a0d934950bc Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents: 246
diff changeset
31 daemon off;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
32
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
33 events {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
34 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
35
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
36 http {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
38
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
39 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
40 listen 127.0.0.1:8080 ssl;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
41 server_name localhost;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
42
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
43 ssl_certificate_key localhost.key;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
44 ssl_certificate localhost.crt;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
45
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
46 location / {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
47 return 200 $server_name;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
48 }
1478
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
49
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
50 location /protocol {
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
51 return 200 $ssl_protocol;
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
52 }
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
53 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
54
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
55 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
56 listen 127.0.0.1:8080;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
57 server_name example.com;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
58
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
59 ssl_certificate_key example.com.key;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
60 ssl_certificate example.com.crt;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
61
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
62 location / {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
63 return 200 $server_name;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
64 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
65 }
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
66
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
67 server {
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
68 listen 127.0.0.1:8081 ssl;
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
69 server_name localhost;
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
70
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
71 ssl_certificate_key localhost.key;
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
72 ssl_certificate localhost.crt;
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
73
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
74 location / {
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
75 return 200 $ssl_session_reused:$ssl_server_name;
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
76 }
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
77 }
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
78 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
79
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
80 EOF
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
81
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
82 eval { require IO::Socket::SSL; die if $IO::Socket::SSL::VERSION < 1.56; };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
83 plan(skip_all => 'IO::Socket::SSL version >= 1.56 required') if $@;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
84
243
de7338227832 Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents: 237
diff changeset
85 eval {
305
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
86 if (IO::Socket::SSL->can('can_client_sni')) {
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
87 IO::Socket::SSL->can_client_sni() or die;
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
88 }
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
89 };
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
90 plan(skip_all => 'IO::Socket::SSL with OpenSSL SNI support required') if $@;
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
91
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
92 eval {
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
93 my $ctx = Net::SSLeay::CTX_new() or die;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
94 my $ssl = Net::SSLeay::new($ctx) or die;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
95 Net::SSLeay::set_tlsext_host_name($ssl, 'example.org') == 1 or die;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
96 };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
97 plan(skip_all => 'Net::SSLeay with OpenSSL SNI support required') if $@;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
98
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
99 $t->plan(8);
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
100
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
101 $t->write_file('openssl.conf', <<EOF);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
102 [ req ]
1488
dbce8fb5f5f8 Tests: align with OpenSSL security level 2.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1478
diff changeset
103 default_bits = 2048
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
104 encrypt_key = no
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
105 distinguished_name = req_distinguished_name
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
106 [ req_distinguished_name ]
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
107 EOF
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
108
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
109 my $d = $t->testdir();
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
110
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
111 foreach my $name ('localhost', 'example.com') {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
112 system('openssl req -x509 -new '
1220
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
113 . "-config $d/openssl.conf -subj /CN=$name/ "
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
114 . "-out $d/$name.crt -keyout $d/$name.key "
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
115 . ">>$d/openssl.out 2>&1") == 0
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
116 or die "Can't create certificate for $name: $!\n";
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
117 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
118
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
119 $t->run();
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
120
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
121 ###############################################################################
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
122
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
123 like(get_cert_cn(), qr!/CN=localhost!, 'default cert');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
124 like(get_cert_cn('example.com'), qr!/CN=example.com!, 'sni cert');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
125
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
126 like(https_get_host('example.com'), qr!example.com!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
127 'host exists, sni exists, and host is equal sni');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
128
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
129 like(https_get_host('example.com', 'example.org'), qr!example.com!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
130 'host exists, sni not found');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
131
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
132 TODO: {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
133 local $TODO = 'sni restrictions';
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
134
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
135 like(https_get_host('example.com', 'localhost'), qr!400 Bad Request!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
136 'host exists, sni exists, and host is not equal sni');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
137
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
138 like(https_get_host('example.org', 'example.com'), qr!400 Bad Request!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
139 'host not found, sni exists');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
140
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
141 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
142
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
143 # $ssl_server_name in sessions
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
144
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
145 my $ctx = new IO::Socket::SSL::SSL_Context(
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
146 SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
147 SSL_session_cache_size => 100);
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
148
1450
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
149 like(get('/', 'localhost', 8081, $ctx), qr/^\.:localhost$/m, 'ssl server name');
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
150
1478
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
151 SKIP: {
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
152 skip 'no TLS 1.3 sessions', 1 if get('/protocol', 'localhost') =~ /TLSv1.3/
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
153 && ($Net::SSLeay::VERSION < 1.88 || $IO::Socket::SSL::VERSION < 2.061);
f9718a0773b9 Tests: skip TLS 1.3 session reuse tests with older Perl modules.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1450
diff changeset
154
1450
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
155 like(get('/', 'localhost', 8081, $ctx), qr/^r:localhost$/m,
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
156 'ssl server name - reused');
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
157
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
158 }
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
159
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
160 ###############################################################################
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
161
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
162 sub get_ssl_socket {
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
163 my ($host, $port, $ctx) = @_;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
164 my $s;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
165
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
166 eval {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
167 local $SIG{ALRM} = sub { die "timeout\n" };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
168 local $SIG{PIPE} = sub { die "sigpipe\n" };
1421
4e48bf51714f Tests: aligned various generic read timeouts to http_end().
Sergey Kandaurov <pluknet@nginx.com>
parents: 1407
diff changeset
169 alarm(8);
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
170 $s = IO::Socket::SSL->new(
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
171 Proto => 'tcp',
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
172 PeerAddr => '127.0.0.1:' . port($port || 8080),
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
173 SSL_hostname => $host,
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
174 SSL_reuse_ctx => $ctx,
246
6072306b7924 Tests: set SSL_verify_mode explicitly.
Homutov Vladimir <vl@nginx.com>
parents: 243
diff changeset
175 SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
176 SSL_error_trap => sub { die $_[1] }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
177 );
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
178 alarm(0);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
179 };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
180 alarm(0);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
181
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
182 if ($@) {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
183 log_in("died: $@");
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
184 return undef;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
185 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
186
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
187 return $s;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
188 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
189
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
190 sub get_cert_cn {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
191 my ($host) = @_;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
192 my $s = get_ssl_socket($host);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
193
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
194 return $s->dump_peer_certificate();
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
195 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
196
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
197 sub https_get_host {
243
de7338227832 Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents: 237
diff changeset
198 my ($host, $sni) = @_;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
199 my $s = get_ssl_socket($sni ? $sni : $host);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
200
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
201 return http(<<EOF, socket => $s);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
202 GET / HTTP/1.0
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
203 Host: $host
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
204
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
205 EOF
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
206 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
207
1450
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
208 sub get {
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
209 my ($uri, $host, $port, $ctx) = @_;
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
210 my $s = get_ssl_socket($host, $port, $ctx) or return;
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
211 my $r = http_get($uri, socket => $s);
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
212 $s->close();
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
213 return $r;
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
214 }
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
215
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
216 ###############################################################################