Software / code / prosody-modules
Comparison
mod_s2s_auth_dane/mod_s2s_auth_dane.lua @ 1436:3944e364ba88
mod_s2s_auth_dane: Add some more info to log messages
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 13 Jun 2014 02:19:52 +0200 |
| parent | 1435:cdc8f226a284 |
| child | 1437:161bbe0b9dd3 |
comparison
equal
deleted
inserted
replaced
| 1435:cdc8f226a284 | 1436:3944e364ba88 |
|---|---|
| 180 local dane = session.dane; | 180 local dane = session.dane; |
| 181 if type(dane) == "table" then | 181 if type(dane) == "table" then |
| 182 local use, tlsa, match_found, supported_found, chain, leafcert, cacert, is_match; | 182 local use, tlsa, match_found, supported_found, chain, leafcert, cacert, is_match; |
| 183 for i = 1, #dane do | 183 for i = 1, #dane do |
| 184 tlsa = dane[i].tlsa; | 184 tlsa = dane[i].tlsa; |
| 185 module:log("debug", "TLSA %s %s %s %d bytes of data", tlsa:getUsage(), tlsa:getSelector(), tlsa:getMatchType(), #tlsa.data); | 185 module:log("debug", "TLSA #%d %s %s %s %d bytes of data", i, tlsa:getUsage(), tlsa:getSelector(), tlsa:getMatchType(), #tlsa.data); |
| 186 use = tlsa.use; | 186 use = tlsa.use; |
| 187 | 187 |
| 188 if enabled_uses:contains(use) then | 188 if enabled_uses:contains(use) then |
| 189 -- PKIX-EE or DANE-EE | 189 -- PKIX-EE or DANE-EE |
| 190 if use == 1 or use == 3 then | 190 if use == 1 or use == 3 then |
| 192 is_match = one_dane_check(tlsa, cert); | 192 is_match = one_dane_check(tlsa, cert); |
| 193 if is_match ~= nil then | 193 if is_match ~= nil then |
| 194 supported_found = true; | 194 supported_found = true; |
| 195 end | 195 end |
| 196 if is_match then | 196 if is_match then |
| 197 log("info", "DANE validation successful"); | 197 log("info", "DANE validated ok using %s", tlsa:getUsage()); |
| 198 session.cert_identity_status = "valid"; | 198 session.cert_identity_status = "valid"; |
| 199 if use == 3 then -- DANE-EE, chain status equals DNSSEC chain status | 199 if use == 3 then -- DANE-EE, chain status equals DNSSEC chain status |
| 200 session.cert_chain_status = "valid"; | 200 session.cert_chain_status = "valid"; |
| 201 -- for usage 1, PKIX-EE, the chain has to be valid already | 201 -- for usage 1, PKIX-EE, the chain has to be valid already |
| 202 end | 202 end |
| 217 if use == 2 and not cacert:issued(leafcert or cacert) then | 217 if use == 2 and not cacert:issued(leafcert or cacert) then |
| 218 module:log("debug", "Broken chain"); | 218 module:log("debug", "Broken chain"); |
| 219 break; | 219 break; |
| 220 end | 220 end |
| 221 if is_match then | 221 if is_match then |
| 222 log("info", "DANE validation successful"); | 222 log("info", "DANE validated ok using %s", tlsa:getUsage()); |
| 223 if use == 2 then -- DANE-TA | 223 if use == 2 then -- DANE-TA |
| 224 session.cert_identity_status = "valid"; | 224 session.cert_identity_status = "valid"; |
| 225 session.cert_chain_status = "valid"; | 225 session.cert_chain_status = "valid"; |
| 226 -- for usage 0, PKIX-CA, identity and chain has to be valid already | 226 -- for usage 0, PKIX-CA, identity and chain has to be valid already |
| 227 end | 227 end |
| 233 end | 233 end |
| 234 end | 234 end |
| 235 end | 235 end |
| 236 if supported_found and not match_found or dane.bogus then | 236 if supported_found and not match_found or dane.bogus then |
| 237 -- No TLSA matched or response was bogus | 237 -- No TLSA matched or response was bogus |
| 238 log("warn", "DANE validation failed"); | 238 local why = "No TLSA matched certificate"; |
| 239 if dane.bogus then | |
| 240 why = "Bogus: "..tostring(dane.bogus); | |
| 241 end | |
| 242 log("warn", "DANE validation failed: %s", why); | |
| 239 session.cert_identity_status = "invalid"; | 243 session.cert_identity_status = "invalid"; |
| 240 session.cert_chain_status = "invalid"; | 244 session.cert_chain_status = "invalid"; |
| 241 end | 245 end |
| 242 else | 246 else |
| 243 if session.cert_chain_status == "valid" and session.cert_identity_status ~= "valid" | 247 if session.cert_chain_status == "valid" and session.cert_identity_status ~= "valid" |