annotate ssl_sni.t @ 1477:8b122b35703b

Tests: fixed session reuse tests in ssl_certificate.t with TLSv1.3. Previously, session data was retrieved too early, before server passed application data, which usually means NewSessionTicket is not yet sent. The fix is to ask server for application data, then retrieve a session.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 20 May 2019 16:00:40 +0300
parents 5f53a1d6b83c
children f9718a0773b9
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 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
49 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
50
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
51 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
52 listen 127.0.0.1:8080;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
53 server_name example.com;
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 ssl_certificate_key example.com.key;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
56 ssl_certificate example.com.crt;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
57
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
58 location / {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
59 return 200 $server_name;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
60 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
61 }
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
62
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
63 server {
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
64 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
65 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
66
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
67 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
68 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
69
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
70 location / {
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
71 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
72 }
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
73 }
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
74 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
75
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
76 EOF
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
77
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
78 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
79 plan(skip_all => 'IO::Socket::SSL version >= 1.56 required') if $@;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
80
243
de7338227832 Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents: 237
diff changeset
81 eval {
305
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
82 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
83 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
84 }
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
85 };
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
86 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
87
f4aab0e66ed0 Tests: better handle the lack of client side SNI support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 249
diff changeset
88 eval {
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
89 my $ctx = Net::SSLeay::CTX_new() or die;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
90 my $ssl = Net::SSLeay::new($ctx) or die;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
91 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
92 };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
93 plan(skip_all => 'Net::SSLeay with OpenSSL SNI support required') if $@;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
94
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
95 $t->plan(8);
237
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 $t->write_file('openssl.conf', <<EOF);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
98 [ req ]
1116
8ef51dbb5d69 Tests: reduced OpenSSL default key length to 1024.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
99 default_bits = 1024
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
100 encrypt_key = no
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
101 distinguished_name = req_distinguished_name
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
102 [ req_distinguished_name ]
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
103 EOF
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
104
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
105 my $d = $t->testdir();
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
106
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
107 foreach my $name ('localhost', 'example.com') {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
108 system('openssl req -x509 -new '
1220
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
109 . "-config $d/openssl.conf -subj /CN=$name/ "
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
110 . "-out $d/$name.crt -keyout $d/$name.key "
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
111 . ">>$d/openssl.out 2>&1") == 0
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
112 or die "Can't create certificate for $name: $!\n";
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
113 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
114
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
115 $t->run();
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
116
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 like(get_cert_cn(), qr!/CN=localhost!, 'default cert');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
120 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
121
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
122 like(https_get_host('example.com'), qr!example.com!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
123 'host exists, sni exists, and host is equal sni');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
124
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
125 like(https_get_host('example.com', 'example.org'), qr!example.com!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
126 'host exists, sni not found');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
127
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
128 TODO: {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
129 local $TODO = 'sni restrictions';
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
130
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
131 like(https_get_host('example.com', 'localhost'), qr!400 Bad Request!,
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
132 'host exists, sni exists, and host is not equal sni');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
133
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
134 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
135 'host not found, sni exists');
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
136
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
1449
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
139 # $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
140
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
141 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
142 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
143 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
144
1450
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
145 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
146
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
147 TODO: {
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
148 local $TODO = 'not yet' if $t->has_module('OpenSSL (1.1.1|3)')
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
149 && !$t->has_version('1.15.10');
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
150
1450
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
151 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
152 '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
153
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
154 }
eeababfd8726 Tests: moved $ssl_server_name tests in http to ssl_sni.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1421
diff changeset
155
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
156 ###############################################################################
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
157
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
158 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
159 my ($host, $port, $ctx) = @_;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
160 my $s;
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 eval {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
163 local $SIG{ALRM} = sub { die "timeout\n" };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
164 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
165 alarm(8);
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
166 $s = IO::Socket::SSL->new(
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
167 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
168 PeerAddr => '127.0.0.1:' . port($port || 8080),
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
169 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
170 SSL_reuse_ctx => $ctx,
246
6072306b7924 Tests: set SSL_verify_mode explicitly.
Homutov Vladimir <vl@nginx.com>
parents: 243
diff changeset
171 SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
172 SSL_error_trap => sub { die $_[1] }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
173 );
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
174 alarm(0);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
175 };
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
176 alarm(0);
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 if ($@) {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
179 log_in("died: $@");
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
180 return undef;
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
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
183 return $s;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
184 }
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 sub get_cert_cn {
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
187 my ($host) = @_;
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
188 my $s = get_ssl_socket($host);
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 return $s->dump_peer_certificate();
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
191 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
192
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
193 sub https_get_host {
243
de7338227832 Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents: 237
diff changeset
194 my ($host, $sni) = @_;
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
195 my $s = get_ssl_socket($sni ? $sni : $host);
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 return http(<<EOF, socket => $s);
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
198 GET / HTTP/1.0
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
199 Host: $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 EOF
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
202 }
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
203
1450
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
204 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
205 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
206 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
207 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
208 $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
209 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
210 }
5f53a1d6b83c Tests: fixed session reuse in ssl_sni.t with OpenSSL 1.1.0+.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1449
diff changeset
211
237
90af19544dd2 Tests: https sni tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
212 ###############################################################################