@@ -69,6 +69,9 @@ ffi.cdef[[
69
69
70
70
int ngx_stream_lua_ffi_ssl_verify_client(void *r, void *cdata, int depth, char **err);
71
71
72
+ int ngx_stream_lua_ffi_ssl_client_random(ngx_stream_lua_request_t *r,
73
+ unsigned char *out, size_t *outlen, char **err);
74
+
72
75
]]
73
76
_EOC_
74
77
}
@@ -1119,3 +1122,117 @@ lua ssl server name: "test.com"
1119
1122
--- no_error_log
1120
1123
[error]
1121
1124
[alert]
1125
+
1126
+
1127
+
1128
+ === TEST 11: client random
1129
+ --- stream_config
1130
+ server {
1131
+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
1132
+
1133
+ ssl_certificate_by_lua_block {
1134
+ collectgarbage()
1135
+
1136
+ local ffi = require "ffi"
1137
+ require "defines"
1138
+
1139
+ local errmsg = ffi.new("char *[1]")
1140
+
1141
+ local r = require "resty.core.base" .get_request()
1142
+ if not r then
1143
+ ngx.log(ngx.ERR, "no request found")
1144
+ return
1145
+ end
1146
+
1147
+ -- test client random length
1148
+ local out = ffi.new("unsigned char[?]", 0)
1149
+ local sizep = ffi.new("size_t[1]", 0)
1150
+
1151
+ local rc = ffi.C.ngx_stream_lua_ffi_ssl_client_random(r, out, sizep, errmsg)
1152
+ if rc ~= 0 then
1153
+ ngx.log(ngx.ERR, "failed to get client random length: ",
1154
+ ffi.string(errmsg[0]))
1155
+ return
1156
+ end
1157
+
1158
+ if tonumber(sizep[0]) ~= 32 then
1159
+ ngx.log(ngx.ERR, "client random length does not equal 32")
1160
+ return
1161
+ end
1162
+
1163
+ -- test client random value
1164
+ out = ffi.new("unsigned char[?]", 50)
1165
+ sizep = ffi.new("size_t[1]", 50)
1166
+
1167
+ rc = ffi.C.ngx_stream_lua_ffi_ssl_client_random(r, out, sizep, errmsg)
1168
+ if rc ~= 0 then
1169
+ ngx.log(ngx.ERR, "failed to get client random: ",
1170
+ ffi.string(errmsg[0]))
1171
+ return
1172
+ end
1173
+
1174
+ 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"
1175
+ if ffi.string(out, sizep[0]) == init_v then
1176
+ ngx.log(ngx.ERR, "maybe the client random value is incorrect")
1177
+ return
1178
+ end
1179
+ }
1180
+
1181
+ ssl_certificate ../../cert/test.crt;
1182
+ ssl_certificate_key ../../cert/test.key;
1183
+
1184
+ return 'it works!\n';
1185
+ }
1186
+ --- stream_server_config
1187
+ lua_ssl_trusted_certificate ../../cert/test.crt;
1188
+
1189
+ content_by_lua_block {
1190
+ do
1191
+ local sock = ngx.socket.tcp()
1192
+
1193
+ sock:settimeout(2000)
1194
+
1195
+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
1196
+ if not ok then
1197
+ ngx.say("failed to connect: ", err)
1198
+ return
1199
+ end
1200
+
1201
+ ngx.say("connected: ", ok)
1202
+
1203
+ local sess, err = sock:sslhandshake(nil, "test.com", true)
1204
+ if not sess then
1205
+ ngx.say("failed to do SSL handshake: ", err)
1206
+ return
1207
+ end
1208
+
1209
+ ngx.say("ssl handshake: ", type(sess))
1210
+
1211
+ while true do
1212
+ local line, err = sock:receive()
1213
+ if not line then
1214
+ -- ngx.say("failed to receive response status line: ", err)
1215
+ break
1216
+ end
1217
+
1218
+ ngx.say("received: ", line)
1219
+ end
1220
+
1221
+ local ok, err = sock:close()
1222
+ ngx.say("close: ", ok, " ", err)
1223
+ end -- do
1224
+ -- collectgarbage()
1225
+ }
1226
+
1227
+ --- stream_response
1228
+ connected: 1
1229
+ ssl handshake: userdata
1230
+ received: it works!
1231
+ close: 1 nil
1232
+
1233
+ --- error_log
1234
+ lua ssl server name: "test.com"
1235
+
1236
+ --- no_error_log
1237
+ [error]
1238
+ [alert]
0 commit comments