@@ -3642,3 +3642,220 @@ 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+ ssl.clear_certs()
3765+ ssl.set_der_cert(ssl.cert_pem_to_der(
3766+ assert(io.open("t/cert/test.crt")):read("*a")))
3767+ ssl.set_der_priv_key(ssl.priv_key_pem_to_der(
3768+ assert(io.open("t/cert/test.key")):read("*a")))
3769+ }
3770+
3771+ ssl_certificate ../../cert/test.crt;
3772+ ssl_certificate_key ../../cert/test.key;
3773+
3774+ server_tokens off;
3775+ location /foo {
3776+ default_type 'text/plain';
3777+ content_by_lua_block {
3778+ local ssl = require "ngx.ssl"
3779+ local mk_len = ssl.get_session_master_key(0)
3780+ ngx.say("master-key length: ", mk_len)
3781+
3782+ local mk = ssl.get_session_master_key()
3783+ if mk and #mk > 0 then
3784+ ngx.say("got master key of length: ",
3785+ #mk)
3786+ end
3787+ }
3788+ more_clear_headers Date;
3789+ }
3790+ }
3791+ --- config
3792+ server_tokens off;
3793+ lua_ssl_trusted_certificate ../../cert/test.crt;
3794+
3795+ location /t {
3796+ content_by_lua_block {
3797+ do
3798+ local sock = ngx.socket.tcp()
3799+
3800+ sock:settimeout(3000)
3801+
3802+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
3803+ if not ok then
3804+ ngx.say("failed to connect: ", err)
3805+ return
3806+ end
3807+
3808+ ngx.say("connected: ", ok)
3809+
3810+ local sess, err = sock:sslhandshake(nil, "test.com", true)
3811+ if not sess then
3812+ ngx.say("failed to do SSL handshake: ", err)
3813+ return
3814+ end
3815+
3816+ ngx.say("ssl handshake: ", type(sess))
3817+
3818+ local req = "GET /foo HTTP/1.0\r\nHost: test.com\r\nConnection: close\r\n\r\n"
3819+ local bytes, err = sock:send(req)
3820+ if not bytes then
3821+ ngx.say("failed to send http request: ", err)
3822+ return
3823+ end
3824+
3825+ ngx.say("sent http request: ", bytes, " bytes.")
3826+
3827+ while true do
3828+ local line, err = sock:receive()
3829+ if not line then
3830+ break
3831+ end
3832+
3833+ ngx.say("received: ", line)
3834+ end
3835+
3836+ local ok, err = sock:close()
3837+ ngx.say("close: ", ok, " ", err)
3838+ end -- do
3839+ }
3840+ }
3841+
3842+ --- request
3843+ GET /t
3844+ --- response_body
3845+ connected: 1
3846+ ssl handshake: cdata
3847+ sent http request: 56 bytes.
3848+ received: HTTP/1.1 200 OK
3849+ received: Server: nginx
3850+ received: Content-Type: text/plain
3851+ received: Content-Length: 51
3852+ received: Connection: close
3853+ received:
3854+ received: master-key length: 48
3855+ received: got master key of length: 48
3856+ close: 1 nil
3857+
3858+ --- no_error_log
3859+ [error]
3860+ [alert]
3861+ [emerg]
0 commit comments