Skip to content

Commit 8ecdfa7

Browse files
committed
Tests: ssl_reject_handshake tests in stream.
1 parent 2151cb6 commit 8ecdfa7

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

stream_ssl_reject_handshake.t

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
#!/usr/bin/perl
2+
3+
# (C) Sergey Kandaurov
4+
# (C) Nginx, Inc.
5+
6+
# Tests for stream ssl module, ssl_reject_handshake.
7+
8+
###############################################################################
9+
10+
use warnings;
11+
use strict;
12+
13+
use Test::More;
14+
15+
BEGIN { use FindBin; chdir($FindBin::Bin); }
16+
17+
use lib 'lib';
18+
use Test::Nginx;
19+
use Test::Nginx::Stream qw/ stream /;
20+
21+
###############################################################################
22+
23+
select STDERR; $| = 1;
24+
select STDOUT; $| = 1;
25+
26+
my $t = Test::Nginx->new()
27+
->has(qw/stream stream_ssl stream_return sni socket_ssl_sni/)
28+
->has_daemon('openssl');
29+
30+
$t->write_file_expand('nginx.conf', <<'EOF');
31+
32+
%%TEST_GLOBALS%%
33+
34+
daemon off;
35+
36+
events {
37+
}
38+
39+
stream {
40+
%%TEST_GLOBALS_STREAM%%
41+
42+
server {
43+
listen 127.0.0.1:8080 ssl;
44+
server_name localhost;
45+
46+
ssl_reject_handshake on;
47+
return $ssl_server_name;
48+
}
49+
50+
server {
51+
listen 127.0.0.1:8080;
52+
server_name virtual;
53+
54+
ssl_certificate localhost.crt;
55+
ssl_certificate_key localhost.key;
56+
57+
return $ssl_server_name;
58+
}
59+
60+
server {
61+
listen 127.0.0.1:8082 ssl;
62+
server_name localhost;
63+
64+
ssl_certificate localhost.crt;
65+
ssl_certificate_key localhost.key;
66+
67+
return $ssl_server_name;
68+
}
69+
70+
server {
71+
listen 127.0.0.1:8082;
72+
server_name virtual1;
73+
74+
return $ssl_server_name;
75+
}
76+
77+
server {
78+
listen 127.0.0.1:8082;
79+
server_name virtual2;
80+
81+
ssl_reject_handshake on;
82+
return $ssl_server_name;
83+
}
84+
}
85+
86+
EOF
87+
88+
$t->write_file('openssl.conf', <<EOF);
89+
[ req ]
90+
default_bits = 2048
91+
encrypt_key = no
92+
distinguished_name = req_distinguished_name
93+
[ req_distinguished_name ]
94+
EOF
95+
96+
my $d = $t->testdir();
97+
98+
foreach my $name ('localhost') {
99+
system('openssl req -x509 -new '
100+
. "-config $d/openssl.conf -subj /CN=$name/ "
101+
. "-out $d/$name.crt -keyout $d/$name.key "
102+
. ">>$d/openssl.out 2>&1") == 0
103+
or die "Can't create certificate for $name: $!\n";
104+
}
105+
106+
$t->try_run('no ssl_reject_handshake')->plan(7);
107+
108+
###############################################################################
109+
110+
# default virtual server rejected
111+
112+
like(get('default', 8080), qr/unrecognized name/, 'default rejected');
113+
like(get(undef, 8080), qr/unrecognized name/, 'absent sni rejected');
114+
like(get('virtual', 8080), qr/virtual/, 'virtual accepted');
115+
116+
# non-default server "virtual2" rejected
117+
118+
like(get('default', 8082), qr/default/, 'default accepted');
119+
is(get(undef, 8082), '', 'absent sni accepted');
120+
like(get('virtual1', 8082), qr/virtual1/, 'virtual 1 accepted');
121+
like(get('virtual2', 8082), qr/unrecognized name/, 'virtual 2 rejected');
122+
123+
###############################################################################
124+
125+
sub get {
126+
my ($host, $port) = @_;
127+
my $s = stream(
128+
PeerAddr => '127.0.0.1:' . port($port),
129+
SSL => 1,
130+
SSL_hostname => $host
131+
);
132+
133+
log_in("ssl sni: $host") if defined $host;
134+
135+
return $s->read() || $@;
136+
}
137+
138+
###############################################################################

0 commit comments

Comments
 (0)