Skip to content

Commit a19b0cb

Browse files
author
Tuure Vartiainen
committed
tests: added a test case for TLS-PSK upstream and downstream.
1 parent dd6b5bb commit a19b0cb

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed

t/140-ssl-c-api.t

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ ffi.cdef[[
6262
void ngx_http_lua_ffi_free_priv_key(void *cdata);
6363
6464
int ngx_http_lua_ffi_ssl_clear_certs(void *r, char **err);
65+
66+
int ngx_http_lua_ffi_ssl_set_psk_key(void *r,
67+
const char *key, size_t len, char **err);
68+
69+
int ngx_http_lua_ffi_ssl_get_psk_identity(void *r,
70+
char *buf, char **err);
71+
72+
int ngx_http_lua_ffi_ssl_get_psk_identity_size(void *r,
73+
char **err);
6574
]]
6675
_EOC_
6776
}
@@ -811,3 +820,150 @@ lua ssl server name: "test.com"
811820
--- no_error_log
812821
[error]
813822
[alert]
823+
824+
825+
826+
=== TEST 6: TLS-PSK
827+
--- http_config
828+
server {
829+
listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
830+
server_name test.com;
831+
832+
ssl_psk_by_lua_block {
833+
collectgarbage()
834+
835+
local ffi = require "ffi"
836+
require "defines"
837+
838+
local errmsg = ffi.new("char *[1]")
839+
840+
local r = getfenv(0).__ngx_req
841+
if not r then
842+
ngx.log(ngx.ERR, "no request found")
843+
return
844+
end
845+
846+
local len = ffi.C.ngx_http_lua_ffi_ssl_get_psk_identity_size(r, errmsg)
847+
848+
if len < 0 then
849+
ngx.log(ngx.ERR, "failed to get psk identity size: ", ffi.string(errmsg[0]))
850+
return
851+
end
852+
853+
if len > 4096 then
854+
ngx.log(ngx.ERR, "psk identity size too long")
855+
return
856+
end
857+
858+
local buf = ffi.new("char[?]", 4096)
859+
860+
local rc = ffi.C.ngx_http_lua_ffi_ssl_get_psk_identity(r, buf, errmsg)
861+
if rc ~= 0 then
862+
ngx.log(ngx.ERR, "failed to get psk identity: ", ffi.string(errmsg[0]))
863+
return
864+
end
865+
866+
local psk_identity = ffi.string(buf, len)
867+
if not psk_identity then
868+
ngx.log(ngx.ERR, "psk_identity is undefined")
869+
return
870+
end
871+
872+
local psk_key = "psk_test_key"
873+
874+
local rc = ffi.C.ngx_http_lua_ffi_ssl_set_psk_key(r, psk_key, #psk_key, errmsg)
875+
if rc ~= 0 then
876+
ngx.log(ngx.ERR, "failed to set psk key: ", ffi.string(errmsg[0]))
877+
return
878+
end
879+
}
880+
881+
ssl_certificate ../../cert/test.crt;
882+
ssl_certificate_key ../../cert/test.key;
883+
884+
lua_ssl_psk_identity psk_test_identity_hint;
885+
886+
server_tokens off;
887+
location /foo {
888+
default_type 'text/plain';
889+
content_by_lua_block { ngx.status = 201 ngx.say("foo") ngx.exit(201) }
890+
more_clear_headers Date;
891+
}
892+
}
893+
--- config
894+
server_tokens off;
895+
896+
location /t {
897+
lua_ssl_ciphers PSK-AES256-CBC-SHA;
898+
lua_ssl_psk_identity psk_test_identity;
899+
lua_ssl_psk_key psk_test_key;
900+
901+
content_by_lua_block {
902+
do
903+
local sock = ngx.socket.tcp()
904+
905+
sock:settimeout(2000)
906+
907+
local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
908+
if not ok then
909+
ngx.say("failed to connect: ", err)
910+
return
911+
end
912+
913+
ngx.say("connected: ", ok)
914+
915+
local sess, err = sock:sslhandshake(nil, "test.com", false)
916+
if not sess then
917+
ngx.say("failed to do SSL handshake: ", err)
918+
return
919+
end
920+
921+
ngx.say("ssl handshake: ", type(sess))
922+
923+
local req = "GET /foo HTTP/1.0\r\nHost: test.com\r\nConnection: close\r\n\r\n"
924+
local bytes, err = sock:send(req)
925+
if not bytes then
926+
ngx.say("failed to send http request: ", err)
927+
return
928+
end
929+
930+
ngx.say("sent http request: ", bytes, " bytes.")
931+
932+
while true do
933+
local line, err = sock:receive()
934+
if not line then
935+
-- ngx.say("failed to recieve response status line: ", err)
936+
break
937+
end
938+
939+
ngx.say("received: ", line)
940+
end
941+
942+
local ok, err = sock:close()
943+
ngx.say("close: ", ok, " ", err)
944+
end -- do
945+
-- collectgarbage()
946+
}
947+
}
948+
949+
--- request
950+
GET /t
951+
--- response_body
952+
connected: 1
953+
ssl handshake: userdata
954+
sent http request: 56 bytes.
955+
received: HTTP/1.1 201 Created
956+
received: Server: nginx
957+
received: Content-Type: text/plain
958+
received: Content-Length: 4
959+
received: Connection: close
960+
received:
961+
received: foo
962+
close: 1 nil
963+
964+
--- error_log
965+
lua ssl server name: "test.com"
966+
967+
--- no_error_log
968+
[error]
969+
[alert]

0 commit comments

Comments
 (0)