56 static const char tls_state_mt[] =
"suricata:tls";
62 static int LuaTlsFlowStateGet(
lua_State *luastate)
77 void *state = FlowGetAppState(
f);
81 luaL_getmetatable(luastate, tls_state_mt);
82 lua_setmetatable(luastate, -2);
86 static int GetCertNotBefore(
lua_State *luastate,
bool client,
const SSLState *ssl_state)
102 static int LuaTlsGetServerCertNotBefore(
lua_State *luastate)
108 return GetCertNotBefore(luastate,
false, ssl);
111 static int LuaTlsGetClientCertNotBefore(
lua_State *luastate)
117 return GetCertNotBefore(luastate,
true, ssl);
120 static int GetCertNotAfter(
lua_State *luastate,
bool client,
const SSLState *ssl_state)
136 static int LuaTlsGetServerCertNotAfter(
lua_State *luastate)
142 return GetCertNotAfter(luastate,
false, ssl);
144 static int LuaTlsGetClientCertNotAfter(
lua_State *luastate)
150 return GetCertNotAfter(luastate,
true, ssl);
153 static int GetCertInfo(
lua_State *luastate,
bool client,
const SSLState *ssl_state)
169 char ssl_version[SSL_VERSION_MAX_STRLEN] =
"Unknown";
170 SSLVersionToString(connp->
version, ssl_version);
191 static int LuaTlsGetServerCertInfo(
lua_State *luastate)
197 return GetCertInfo(luastate,
false, ssl);
200 static int LuaTlsGetClientCertInfo(
lua_State *luastate)
206 return GetCertInfo(luastate,
true, ssl);
218 static int LuaTlsGetSNI(
lua_State *luastate)
227 return GetSNI(luastate, ssl);
230 static int GetCertChain(
lua_State *luastate,
bool client)
248 lua_newtable(luastate);
253 lua_pushinteger(luastate, u++);
255 lua_newtable(luastate);
257 lua_pushstring(luastate,
"length");
258 lua_pushinteger(luastate, cert->
cert_len);
259 lua_settable(luastate, -3);
261 lua_pushstring(luastate,
"data");
264 lua_settable(luastate, -3);
265 lua_settable(luastate, -3);
271 static int LuaTlsGetServerCertChain(
lua_State *luastate)
273 return GetCertChain(luastate,
false);
276 static int LuaTlsGetClientCertChain(
lua_State *luastate)
278 return GetCertChain(luastate,
true);
281 static int GetCertSerial(
lua_State *luastate,
bool client)
300 static int LuaTlsGetServerCertSerial(
lua_State *luastate)
302 return GetCertSerial(luastate,
false);
305 static int LuaTlsGetClientCertSerial(
lua_State *luastate)
307 return GetCertSerial(luastate,
true);
310 static int GetAgreedVersion(
lua_State *luastate,
bool client)
323 char ssl_version[SSL_VERSION_MAX_STRLEN] =
"Unknown";
324 SSLVersionToString(
version, ssl_version);
326 lua_pushstring(luastate, (
const char *)&ssl_version);
330 static int LuaTlsGetServerVersion(
lua_State *luastate)
332 return GetAgreedVersion(luastate,
false);
335 static int LuaTlsGetClientVersion(
lua_State *luastate)
337 return GetAgreedVersion(luastate,
true);
340 static const struct luaL_Reg tlslib_meta[] = {
342 {
"get_server_cert_not_before", LuaTlsGetServerCertNotBefore },
343 {
"get_client_cert_not_before", LuaTlsGetClientCertNotBefore },
344 {
"get_server_cert_not_after", LuaTlsGetServerCertNotAfter },
345 {
"get_client_cert_not_after", LuaTlsGetClientCertNotAfter },
346 {
"get_server_version", LuaTlsGetServerVersion },
347 {
"get_client_version", LuaTlsGetClientVersion },
348 {
"get_server_serial", LuaTlsGetServerCertSerial },
349 {
"get_client_serial", LuaTlsGetClientCertSerial },
350 {
"get_server_cert_info", LuaTlsGetServerCertInfo },
351 {
"get_client_cert_info", LuaTlsGetClientCertInfo },
352 {
"get_client_sni", LuaTlsGetSNI },
353 {
"get_client_cert_chain", LuaTlsGetClientCertChain },
354 {
"get_server_cert_chain", LuaTlsGetServerCertChain },
359 static const struct luaL_Reg tlslib[] = {
361 {
"get_tx", LuaTlsFlowStateGet },
368 luaL_newmetatable(L, tls_state_mt);
369 lua_pushvalue(L, -1);
370 lua_setfield(L, -2,
"__index");
371 luaL_setfuncs(L, tlslib_meta, 0);
373 luaL_newlib(L, tlslib);