Software /
code /
prosody
Comparison
plugins/mod_s2s_auth_certs.lua @ 12816:02f8b10d73e8
mod_s2s_auth_certs: Validate certificates against secure SRV targets
Secure delegation or "Mini-DANE"
As with the existing DANE support, only usable in one direction, client
certificate authentication will fail if this is relied on.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 22 Dec 2022 00:13:37 +0100 |
parent | 12812:b2d422b88cd6 |
child | 12977:74b9e05af71e |
comparison
equal
deleted
inserted
replaced
12815:2d134201dc55 | 12816:02f8b10d73e8 |
---|---|
9 | 9 |
10 module:hook("s2s-check-certificate", function(event) | 10 module:hook("s2s-check-certificate", function(event) |
11 local session, host, cert = event.session, event.host, event.cert; | 11 local session, host, cert = event.session, event.host, event.cert; |
12 local conn = session.conn; | 12 local conn = session.conn; |
13 local log = session.log or log; | 13 local log = session.log or log; |
14 | |
15 local secure_hostname = conn.extra and conn.extra.secure_hostname; | |
14 | 16 |
15 if not cert then | 17 if not cert then |
16 log("warn", "No certificate provided by %s", host or "unknown host"); | 18 log("warn", "No certificate provided by %s", host or "unknown host"); |
17 return; | 19 return; |
18 end | 20 end |
43 else | 45 else |
44 session.cert_identity_status = "invalid" | 46 session.cert_identity_status = "invalid" |
45 end | 47 end |
46 log("debug", "certificate identity validation result: %s", session.cert_identity_status); | 48 log("debug", "certificate identity validation result: %s", session.cert_identity_status); |
47 end | 49 end |
50 | |
51 -- Check for DNSSEC-signed SRV hostname | |
52 if secure_hostname and session.cert_identity_status ~= "valid" then | |
53 if cert_verify_identity(secure_hostname, "xmpp-server", cert) then | |
54 module:log("info", "Secure SRV name delegation %q -> %q", secure_hostname, host); | |
55 session.cert_identity_status = "valid" | |
56 end | |
57 end | |
48 end | 58 end |
49 measure_cert_statuses:with_labels(session.cert_chain_status or "unknown", session.cert_identity_status or "unknown"):add(1); | 59 measure_cert_statuses:with_labels(session.cert_chain_status or "unknown", session.cert_identity_status or "unknown"):add(1); |
50 end, 509); | 60 end, 509); |
51 | 61 |