view mod_tls_policy/mod_tls_policy.lua @ 1891:a43ed0d28918

mod_tls_policy: Change the FS shortcut to match on ciphers with (EC)DHE (produces nicer stream error)
author Kim Alvefur <>
date Fri, 02 Oct 2015 03:53:34 +0200
parents d0fd8a29b724
children 1b701f208b1b
line wrap: on
line source

assert(require"ssl.core".info, "Incompatible LuaSec version");

local function hook(event_name, typ, policy)
	if not policy then return end
	if policy == "FS" then
		policy = { cipher = "^E?C?DHE%-" };
	elseif type(policy) == "string" then
		policy = { cipher = policy };

	module:hook(event_name, function (event)
		local origin = event.origin;
		if origin.encrypted then
			local info = origin.conn:socket():info();
			for key, what in pairs(policy) do
				module:log("debug", "Does info[%q] = %s match %s ?", key, tostring(info[key]), tostring(what));
				if (type(what) == "number" and what < info[key] ) or (type(what) == "string" and not info[key]:match(what)) then
					origin:close({ condition = "policy-violation", text = ("TLS %s '%s' not acceptable"):format(key, tostring(info[key])) });
					return false;
				module:log("debug", "Seems so");
			module:log("debug", "Policy matches");
	end, 1000);

local policy = module:get_option(, {});

if type(policy) == "string" then
	policy = { c2s = policy, s2s = policy };

hook("stream-features", "c2s", policy.c2s);
hook("s2s-stream-features", "s2sin", policy.s2sin or policy.s2s);
hook("stanza/", "s2sout", policy.s2sout or policy.s2s);