@@ -3642,3 +3642,216 @@ lua ssl server name: "test.com"
36423642[error]
36433643[emerg]
36443644[crit]
3645+
3646+
3647+
3648+ === TEST 38: read server-random via ssl.get_server_random()
3649+ --- http_config
3650+ lua_package_path "$TEST_NGINX_LUA_PACKAGE_PATH";
3651+
3652+ server {
3653+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
3654+ server_name test.com;
3655+ ssl_certificate_by_lua_block {
3656+ local ssl = require "ngx.ssl"
3657+ local server_random_len = ssl.get_server_random(0)
3658+ print("server-random length: ", server_random_len)
3659+
3660+ local init_v = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3661+ local server_random = ssl.get_server_random()
3662+ if server_random == init_v then
3663+ print("maybe the server random value is incorrect")
3664+ end
3665+ }
3666+ ssl_certificate ../../cert/test.crt;
3667+ ssl_certificate_key ../../cert/test.key;
3668+
3669+ server_tokens off;
3670+ location /foo {
3671+ default_type 'text/plain';
3672+ content_by_lua_block {ngx.status = 201 ngx.say("foo") ngx.exit(201)}
3673+ more_clear_headers Date;
3674+ }
3675+ }
3676+ --- config
3677+ server_tokens off;
3678+ lua_ssl_trusted_certificate ../../cert/test.crt;
3679+
3680+ location /t {
3681+ content_by_lua_block {
3682+ do
3683+ local sock = ngx.socket.tcp()
3684+
3685+ sock:settimeout(3000)
3686+
3687+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
3688+ if not ok then
3689+ ngx.say("failed to connect: ", err)
3690+ return
3691+ end
3692+
3693+ ngx.say("connected: ", ok)
3694+
3695+ local sess, err = sock:sslhandshake(nil, "test.com", true)
3696+ if not sess then
3697+ ngx.say("failed to do SSL handshake: ", err)
3698+ return
3699+ end
3700+
3701+ ngx.say("ssl handshake: ", type(sess))
3702+
3703+ local req = "GET /foo HTTP/1.0\r\nHost: test.com\r\nConnection: close\r\n\r\n"
3704+ local bytes, err = sock:send(req)
3705+ if not bytes then
3706+ ngx.say("failed to send http request: ", err)
3707+ return
3708+ end
3709+
3710+ ngx.say("sent http request: ", bytes, " bytes.")
3711+
3712+ while true do
3713+ local line, err = sock:receive()
3714+ if not line then
3715+ -- ngx.say("failed to receive response status line: ", err)
3716+ break
3717+ end
3718+
3719+ ngx.say("received: ", line)
3720+ end
3721+
3722+ local ok, err = sock:close()
3723+ ngx.say("close: ", ok, " ", err)
3724+ end -- do
3725+ -- collectgarbage()
3726+ }
3727+ }
3728+
3729+ --- request
3730+ GET /t
3731+ --- response_body
3732+ connected: 1
3733+ ssl handshake: cdata
3734+ sent http request: 56 bytes.
3735+ received: HTTP/1.1 201 Created
3736+ received: Server: nginx
3737+ received: Content-Type: text/plain
3738+ received: Content-Length: 4
3739+ received: Connection: close
3740+ received:
3741+ received: foo
3742+ close: 1 nil
3743+
3744+ --- error_log
3745+ server-random length: 32
3746+
3747+ --- no_error_log
3748+ [error]
3749+ [alert]
3750+ [emerg]
3751+
3752+
3753+
3754+ === TEST 39: read session master key via ssl.get_session_master_key()
3755+ --- http_config
3756+ lua_package_path "$TEST_NGINX_LUA_PACKAGE_PATH";
3757+
3758+ server {
3759+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
3760+ server_name test.com;
3761+ ssl_protocols TLSv1.2;
3762+ ssl_certificate_by_lua_block {
3763+ local ssl = require "ngx.ssl"
3764+ local master_key_len = ssl.get_session_master_key(0)
3765+ print("master-key length: ", master_key_len)
3766+
3767+ local master_key = ssl.get_session_master_key()
3768+ if master_key and #master_key > 0 then
3769+ print("got master key of length: ", #master_key)
3770+ end
3771+ }
3772+ ssl_certificate ../../cert/test.crt;
3773+ ssl_certificate_key ../../cert/test.key;
3774+
3775+ server_tokens off;
3776+ location /foo {
3777+ default_type 'text/plain';
3778+ content_by_lua_block {ngx.status = 201 ngx.say("foo") ngx.exit(201)}
3779+ more_clear_headers Date;
3780+ }
3781+ }
3782+ --- config
3783+ server_tokens off;
3784+ lua_ssl_trusted_certificate ../../cert/test.crt;
3785+
3786+ location /t {
3787+ content_by_lua_block {
3788+ do
3789+ local sock = ngx.socket.tcp()
3790+
3791+ sock:settimeout(3000)
3792+
3793+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
3794+ if not ok then
3795+ ngx.say("failed to connect: ", err)
3796+ return
3797+ end
3798+
3799+ ngx.say("connected: ", ok)
3800+
3801+ local sess, err = sock:sslhandshake(nil, "test.com", true)
3802+ if not sess then
3803+ ngx.say("failed to do SSL handshake: ", err)
3804+ return
3805+ end
3806+
3807+ ngx.say("ssl handshake: ", type(sess))
3808+
3809+ local req = "GET /foo HTTP/1.0\r\nHost: test.com\r\nConnection: close\r\n\r\n"
3810+ local bytes, err = sock:send(req)
3811+ if not bytes then
3812+ ngx.say("failed to send http request: ", err)
3813+ return
3814+ end
3815+
3816+ ngx.say("sent http request: ", bytes, " bytes.")
3817+
3818+ while true do
3819+ local line, err = sock:receive()
3820+ if not line then
3821+ -- ngx.say("failed to receive response status line: ", err)
3822+ break
3823+ end
3824+
3825+ ngx.say("received: ", line)
3826+ end
3827+
3828+ local ok, err = sock:close()
3829+ ngx.say("close: ", ok, " ", err)
3830+ end -- do
3831+ -- collectgarbage()
3832+ }
3833+ }
3834+
3835+ --- request
3836+ GET /t
3837+ --- response_body
3838+ connected: 1
3839+ ssl handshake: cdata
3840+ sent http request: 56 bytes.
3841+ received: HTTP/1.1 201 Created
3842+ received: Server: nginx
3843+ received: Content-Type: text/plain
3844+ received: Content-Length: 4
3845+ received: Connection: close
3846+ received:
3847+ received: foo
3848+ close: 1 nil
3849+
3850+ --- error_log
3851+ master-key length: 48
3852+ got master key of length: 48
3853+
3854+ --- no_error_log
3855+ [error]
3856+ [alert]
3857+ [emerg]
0 commit comments