TLS ###
TLS详细信息通过``suricata.tls``库暴露给Lua脚本,例如:
local tls = require("suricata.tls")
20.3.33. 初始化¶
如果目的是创建日志脚本,按如下方式初始化缓冲区:
function init (args)
local needs = {}
needs["protocol"] = "tls"
return needs
end
如果是检测脚本则使用:
function init (args)
return {}
end
20.3.34. API¶
20.3.34.1. 事务处理¶
TLS基于事务处理,使用前必须先获取当前事务:
local tx, err = tls.get_tx()
if tx == nil then
print(err)
end
所有其他函数都是事务表的方法。
20.3.34.2. 客户端方法¶
20.3.34.2.1. get_client_version
¶
通过``get_client_version``获取TLS会话中协商的版本字符串。
示例:
function log (args)
t, err = tls.get_tx()
version = t:get_client_version()
if version ~= nil then
-- 执行操作
end
end
20.3.34.2.2. get_client_cert_chain
¶
通过``get_client_cert_chain``向脚本提供证书链
输出是一个证书数组,每个证书都是包含`data`和`length`键的哈希表。
示例:
-- 使用来自https://github.com/wahern/luaossl的debian lua-luaossl
local x509 = require"openssl.x509"
chain = t:get_client_cert_chain()
for k, v in pairs(chain) do
-- v.length是数据长度
-- v.data是证书的原始二进制数据
print("data length is" .. v["length"] .. "\n")
cert = x509.new(v["data"], "DER")
print(cert:text() .. "\n")
end
20.3.34.2.3. get_client_cert_info
¶
通过``get_client_cert_info``向脚本提供证书信息
示例:
function log (args)
version, subject, issuer, fingerprint = t:get_client_cert_info()
if version ~= nil then
-- 执行操作
end
end
20.3.34.2.4. get_client_cert_not_after
¶
获取证书有效期的结束时间Unix时间戳。
示例:
function log (args)
notafter = t:get_client_cert_not_after()
if notafter < os.time() then
-- 已过期证书
end
end
20.3.34.2.5. get_client_cert_not_before
¶
获取证书有效期的开始时间Unix时间戳。
示例:
function log (args)
notbefore = t:get_client_cert_not_before()
if notbefore > os.time() then
-- 尚未生效的证书
end
end
20.3.34.2.6. get_client_serial
¶
通过``get_client_serial``获取TLS证书序列号。
示例:
function log (args)
serial = t:get_client_serial()
if serial ~= nil then
-- 执行操作
end
end
20.3.34.2.7. get_client_sni
¶
从TLS连接中获取服务器名称指示(SNI)。
示例:
function log (args)
asked_domain = t:get_client_sni()
if string.find(asked_domain, "badguys") then
-- 连接到可疑域名时的处理
end
end
20.3.34.3. 服务端方法¶
20.3.34.3.1. get_server_cert_info
¶
通过``get_server_cert_info``向脚本提供证书信息
示例:
function log (args)
version, subject, issuer, fingerprint = t:get_server_cert_info()
if version ~= nil then
-- 执行操作
end
end
20.3.34.3.2. get_server_cert_chain
¶
通过``get_server_cert_chain``向脚本提供证书链
输出是一个证书数组,每个证书都是包含`data`和`length`键的哈希表。
示例:
-- 使用来自https://github.com/wahern/luaossl的debian lua-luaossl
local x509 = require"openssl.x509"
chain = t:get_server_cert_chain()
for k, v in pairs(chain) do
-- v.length是数据长度
-- v.data是证书的原始二进制数据
print("data length is" .. v["length"] .. "\n")
cert = x509.new(v["data"], "DER")
print(cert:text() .. "\n")
end
20.3.34.3.3. get_server_cert_not_after
¶
获取证书有效期的结束时间Unix时间戳。
示例:
function log (args)
notafter = t:get_server_cert_not_after()
if notafter < os.time() then
-- 已过期证书
end
end
20.3.34.3.4. get_server_cert_not_before
¶
获取证书有效期的开始时间Unix时间戳。
示例:
function log (args)
notbefore = t:get_server_cert_not_before()
if notbefore > os.time() then
-- 尚未生效的证书
end
end
20.3.34.3.5. get_server_serial
¶
通过``get_server_serial``获取TLS证书序列号。
示例:
function log (args)
serial = t:get_server_serial()
if serial ~= nil then
-- 执行操作
end
end