Skip to content

Commit 1a7e4f3

Browse files
author
Tuure Vartiainen
committed
tests: added test cases for TLS-PSK upstream and downstream.
1 parent ac3f1bf commit 1a7e4f3

File tree

1 file changed

+257
-0
lines changed

1 file changed

+257
-0
lines changed

t/ssl-psk.t

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
1+
# vim:set ft=ts=4 sw=4 et fdm=marker:
2+
3+
use Test::Nginx::Socket::Lua;
4+
use Cwd qw(abs_path realpath cwd);
5+
use File::Basename;
6+
7+
#worker_connections(10140);
8+
#workers(1);
9+
#log_level('warn');
10+
11+
repeat_each(2);
12+
13+
plan tests => repeat_each() * (blocks() * 6 + 2);
14+
15+
our $CWD = cwd();
16+
17+
no_long_string();
18+
#no_diff();
19+
20+
$ENV{TEST_NGINX_LUA_PACKAGE_PATH} = "$::CWD/lib/?.lua;;";
21+
$ENV{TEST_NGINX_HTML_DIR} ||= html_dir();
22+
23+
$ENV{TEST_NGINX_RESOLVER} ||= '8.8.8.8';
24+
$ENV{TEST_NGINX_CERT_DIR} ||= dirname(realpath(abs_path(__FILE__)));
25+
26+
run_tests();
27+
28+
__DATA__
29+
30+
=== TEST 1: TLS-PSK
31+
--- http_config
32+
server {
33+
listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
34+
server_name test.com;
35+
36+
ssl_psk_by_lua_block {
37+
local ssl = require "ngx.ssl"
38+
39+
local psk_key = "psk_test_key"
40+
41+
local psk_identity, err = ssl.get_psk_identity()
42+
if not psk_identity then
43+
ngx.log(ngx.ERR, "failed to get psk identity: ", err)
44+
return ngx.ERROR
45+
end
46+
47+
print("client psk identity: ", psk_identity)
48+
49+
local ok, err = ssl.set_psk_key(key)
50+
if not ok then
51+
ngx.log(ngx.ERR, "failed to set psk key: ", err)
52+
return ngx.ERROR
53+
end
54+
}
55+
56+
ssl_certificate ../../cert/test.crt;
57+
ssl_certificate_key ../../cert/test.key;
58+
59+
ssl_psk_identity_hint psk_test_identity_hint;
60+
61+
server_tokens off;
62+
location /foo {
63+
default_type 'text/plain';
64+
content_by_lua_block { ngx.status = 201 ngx.say("foo") ngx.exit(201) }
65+
more_clear_headers Date;
66+
}
67+
}
68+
--- config
69+
server_tokens off;
70+
71+
location /t {
72+
lua_ssl_ciphers PSK-AES256-CBC-SHA;
73+
lua_ssl_psk_identity psk_test_identity;
74+
lua_ssl_psk_key psk_test_key;
75+
76+
content_by_lua_block {
77+
do
78+
local sock = ngx.socket.tcp()
79+
80+
sock:settimeout(2000)
81+
82+
local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
83+
if not ok then
84+
ngx.say("failed to connect: ", err)
85+
return
86+
end
87+
88+
ngx.say("connected: ", ok)
89+
90+
local sess, err = sock:sslhandshake(nil, "test.com", false)
91+
if not sess then
92+
ngx.say("failed to do SSL handshake: ", err)
93+
return
94+
end
95+
96+
ngx.say("ssl handshake: ", type(sess))
97+
98+
local req = "GET /foo HTTP/1.0\r\nHost: test.com\r\nConnection: close\r\n\r\n"
99+
local bytes, err = sock:send(req)
100+
if not bytes then
101+
ngx.say("failed to send http request: ", err)
102+
return
103+
end
104+
105+
ngx.say("sent http request: ", bytes, " bytes.")
106+
107+
while true do
108+
local line, err = sock:receive()
109+
if not line then
110+
-- ngx.say("failed to recieve response status line: ", err)
111+
break
112+
end
113+
114+
ngx.say("received: ", line)
115+
end
116+
117+
local ok, err = sock:close()
118+
ngx.say("close: ", ok, " ", err)
119+
end -- do
120+
-- collectgarbage()
121+
}
122+
}
123+
124+
--- request
125+
GET /t
126+
--- response_body
127+
connected: 1
128+
ssl handshake: userdata
129+
sent http request: 56 bytes.
130+
received: HTTP/1.1 201 Created
131+
received: Server: nginx
132+
received: Content-Type: text/plain
133+
received: Content-Length: 4
134+
received: Connection: close
135+
received:
136+
received: foo
137+
close: 1 nil
138+
139+
--- error_log
140+
lua ssl server name: "test.com"
141+
client psk identity: psk_test_identity
142+
143+
--- no_error_log
144+
[alert]
145+
[emerg]
146+
[error]
147+
148+
149+
150+
=== TEST 2: TLS-PSK mismatching key
151+
--- http_config
152+
server {
153+
listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
154+
server_name test.com;
155+
156+
ssl_psk_by_lua_block {
157+
local ssl = require "ngx.ssl"
158+
159+
local psk_key = "psk_test_key2"
160+
161+
local psk_identity, err = ssl.get_psk_identity()
162+
if not psk_identity then
163+
ngx.log(ngx.ERR, "failed to get psk identity: ", err)
164+
return ngx.ERROR
165+
end
166+
167+
print("client psk identity: ", psk_identity)
168+
169+
local ok, err = ssl.set_psk_key(key)
170+
if not ok then
171+
ngx.log(ngx.ERR, "failed to set psk key: ", err)
172+
return ngx.ERROR
173+
end
174+
}
175+
176+
ssl_certificate ../../cert/test.crt;
177+
ssl_certificate_key ../../cert/test.key;
178+
179+
ssl_psk_identity_hint psk_test_identity_hint;
180+
181+
server_tokens off;
182+
location /foo {
183+
default_type 'text/plain';
184+
content_by_lua_block { ngx.status = 201 ngx.say("foo") ngx.exit(201) }
185+
more_clear_headers Date;
186+
}
187+
}
188+
--- config
189+
server_tokens off;
190+
191+
location /t {
192+
lua_ssl_ciphers PSK-AES256-CBC-SHA;
193+
lua_ssl_psk_identity psk_test_identity;
194+
lua_ssl_psk_key psk_test_key;
195+
196+
content_by_lua_block {
197+
do
198+
local sock = ngx.socket.tcp()
199+
200+
sock:settimeout(2000)
201+
202+
local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
203+
if not ok then
204+
ngx.say("failed to connect: ", err)
205+
return
206+
end
207+
208+
ngx.say("connected: ", ok)
209+
210+
local sess, err = sock:sslhandshake(nil, "test.com", false)
211+
if not sess then
212+
ngx.say("failed to do SSL handshake: ", err)
213+
return
214+
end
215+
216+
ngx.say("ssl handshake: ", type(sess))
217+
218+
local req = "GET /foo HTTP/1.0\r\nHost: test.com\r\nConnection: close\r\n\r\n"
219+
local bytes, err = sock:send(req)
220+
if not bytes then
221+
ngx.say("failed to send http request: ", err)
222+
return
223+
end
224+
225+
ngx.say("sent http request: ", bytes, " bytes.")
226+
227+
while true do
228+
local line, err = sock:receive()
229+
if not line then
230+
-- ngx.say("failed to recieve response status line: ", err)
231+
break
232+
end
233+
234+
ngx.say("received: ", line)
235+
end
236+
237+
local ok, err = sock:close()
238+
ngx.say("close: ", ok, " ", err)
239+
end -- do
240+
-- collectgarbage()
241+
}
242+
}
243+
244+
--- request
245+
GET /t
246+
--- response_body
247+
connected: 1
248+
failed to do SSL handshake: handshake failed
249+
250+
--- error_log
251+
lua ssl server name: "test.com"
252+
client psk identity: psk_test_identity
253+
254+
--- no_error_log
255+
[alert]
256+
[emerg]
257+
[error]

0 commit comments

Comments
 (0)