{"id":18625,"date":"2026-11-06T16:38:52","date_gmt":"2026-11-06T19:38:52","guid":{"rendered":"https:\/\/www.homehost.com.br\/blog\/?p=18625"},"modified":"2026-11-06T16:39:02","modified_gmt":"2026-11-06T19:39:02","slug":"dnssec","status":"publish","type":"post","link":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/","title":{"rendered":"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>O DNSSEC \u00e9 uma extens\u00e3o de seguran\u00e7a do DNS que assina digitalmente as respostas do seu dom\u00ednio, para que ningu\u00e9m consiga falsificar o endere\u00e7o para onde ele aponta. Com o verificador abaixo, voc\u00ea confere se o DNSSEC est\u00e1 ativo, se a cadeia de confian\u00e7a est\u00e1 completa e se o registro DS confere com as chaves publicadas.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Brasil, 1.898.861 dom\u00ednios .br usam DNSSEC, 31,8% do total, segundo as <a href=\"https:\/\/www.homehost.com.br\/blog\/registro-de-dominios\/estatisticas-dominios-br\/\">estat\u00edsticas de dom\u00ednios .br<\/a>. Quem usa os servidores DNS do Registro.br j\u00e1 tem o recurso ligado sem fazer nada. Nos outros casos, a ativa\u00e7\u00e3o leva poucos passos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verifique o DNSSEC do seu dom\u00ednio<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Digite o dom\u00ednio e clique em Verificar. A ferramenta consulta o DNS p\u00fablico do Google e da Cloudflare, que validam DNSSEC, e mostra o resultado, a cadeia de confian\u00e7a da raiz at\u00e9 o dom\u00ednio, os detalhes do registro DS e das chaves, e o que fazer em seguida.<\/p>\n\n\n\n<div class=\"hh-dsec\" id=\"hh-dsec\" style=\"max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;\"><\/div>\n<script>(function () { var root0 = document.getElementById(\"hh-dsec\"); if (!root0) { return; } var AMP = String.fromCharCode(38); var S2 = \"\/\" + \"\/\"; var PFX = \"hh-dsec-\"; function U(n) { return String.fromCharCode(n); } var ELL = U(8230); var DOT = \" \" + U(183) + \" \"; var GURL = \"https:\" + S2 + \"dns.google\/resolve?name=\"; var CURL = \"https:\" + S2 + \"cloudflare-dns.com\/dns-query?name=\"; var RES = [{name: \"Google\", ip: \"8.8.8.8\", url: GURL, cf: false}, {name: \"Cloudflare\", ip: \"1.1.1.1\", url: CURL, cf: true}]; var NAVY = \"#0b3d91\"; var COL = {ok: [\"#15803d\", \"#e8f5ec\", U(10004)], warn: [\"#b45309\", \"#fff4e5\", U(9888)], err: [\"#b42318\", \"#fdecec\", U(10006)], info: [\"#1d4ed8\", \"#eef3ff\", U(8505)], off: [\"#475569\", \"#f1f5f9\", U(8212)]}; var RANK = {err: 0, warn: 1, ok: 2, info: 3}; var MONO = \"font-family:Consolas,Menlo,monospace;font-size:12.5px;overflow-wrap:anywhere;word-break:break-all;\"; var HOST = \"abcdefghijklmnopqrstuvwxyz0123456789-_\"; var DIGS = \"0123456789\"; var DNSFAIL = \"N\"+U(227)+\"o deu para acessar o servi\"+U(231)+\"o de DNS. Um firewall, uma rede corporativa ou uma extens\"+U(227)+\"o do navegador pode estar bloqueando. Tente outra rede ou uma janela an\"+U(244)+\"nima com as extens\"+U(245)+\"es desligadas.\"; var ALG = {1: [\"RSA\/MD5\", \"bad\"], 3: [\"DSA\/SHA-1\", \"bad\"], 5: [\"RSA\/SHA-1\", \"sha1\"], 6: [\"DSA\/SHA-1 com NSEC3\", \"bad\"], 7: [\"RSA\/SHA-1 com NSEC3\", \"sha1\"], 8: [\"RSA\/SHA-256\", \"rec\"], 10: [\"RSA\/SHA-512\", \"ok\"], 12: [\"GOST R 34.10-2001\", \"bad\"], 13: [\"ECDSA P-256 com SHA-256\", \"rec\"], 14: [\"ECDSA P-384 com SHA-384\", \"ok\"], 15: [\"Ed25519\", \"rec\"], 16: [\"Ed448\", \"ok\"], 17: [\"SM2 com SM3\", \"ok\"], 23: [\"GOST R 34.10-2012\", \"ok\"]}; var DIG = {1: [\"SHA-1\", \"sha1\"], 2: [\"SHA-256\", \"rec\"], 3: [\"GOST R 34.11-94\", \"bad\"], 4: [\"SHA-384\", \"ok\"], 5: [\"GOST R 34.11-2012\", \"ok\"], 6: [\"SM3\", \"ok\"]}; var HASH = {1: \"SHA-1\", 2: \"SHA-256\", 4: \"SHA-384\"}; var ROOTK = {20326: \"KSK-2017\", 38696: \"KSK-2024\"}; var EDE = {1: \"algoritmo de chave n\"+U(227)+\"o suportado\", 2: \"tipo de resumo do DS n\"+U(227)+\"o suportado\", 5: \"valida\"+U(231)+U(227)+\"o inconclusiva\", 6: \"assinatura inv\"+U(225)+\"lida\", 7: \"assinatura vencida\", 8: \"assinatura que ainda n\"+U(227)+\"o come\"+U(231)+\"ou a valer\", 9: \"nenhuma chave da zona confere com o DS\", 10: \"faltam assinaturas\", 11: \"chave sem a marca\"+U(231)+U(227)+\"o de chave de zona\", 12: \"falta a prova de inexist\"+U(234)+\"ncia (NSEC)\", 27: \"n\"+U(250)+\"mero de itera\"+U(231)+U(245)+\"es do NSEC3 n\"+U(227)+\"o suportado\"}; var busy = false; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute(\"style\", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function ge(a, b) { return Math.max(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function plural(n, one, many) { return n === 1 ? one : many; } function nm(s) { s = String(or(s, \"\")).trim().toLowerCase(); while (gt(s.length, 1) ? s.charAt(s.length - 1) === \".\" : false) { s = s.slice(0, -1); } return s ? s : \".\"; } function ends(h, s) { if (s === \".\") { return true; } if (h === s) { return true; } return gt(h.length, s.length) ? h.slice(h.length - s.length - 1) === \".\" + s : false; } function parent(z) { if (z === \".\") { return \"\"; } var i = z.indexOf(\".\"); return i === -1 ? \".\" : z.slice(i + 1); } function zname(z) { return z === \".\" ? \"a raiz\" : z; } function emZ(z) { return z === \".\" ? \"na raiz\" : \"em \" + z; } function listPt(a) { if (a.length === 0) { return \"\"; } if (a.length === 1) { return a[0]; } return a.slice(0, a.length - 1).join(\", \") + \" e \" + a[a.length - 1]; } function two(n) { return lt(n, 10) ? \"0\" + n : String(n); } function fmtDate(sec) { var d = new Date(sec * 1000); return two(d.getDate()) + \"\/\" + two(d.getMonth() + 1) + \"\/\" + d.getFullYear() + \", \" + two(d.getHours()) + \"h\" + two(d.getMinutes()); } function dur(s) { s = Math.round(Number(s)); if (isNaN(s) ? true : lt(s, 0)) { return \"\"; } if (lt(s, 60)) { return s + plural(s, \" segundo\", \" segundos\"); } if (lt(s, 3600)) { var m = Math.round(s \/ 60); return m + plural(m, \" minuto\", \" minutos\"); } if (lt(s, 86400)) { var h = Math.round(s \/ 3600); return h + plural(h, \" hora\", \" horas\"); } var d = Math.round(s \/ 86400); return d + plural(d, \" dia\", \" dias\"); } function algName(a) { var x = ALG[a]; return x ? x[0] : \"algoritmo \" + a; } function algFull(a) { var x = ALG[a]; return x ? x[0] + \" (algoritmo \" + a + \")\" : \"algoritmo \" + a; } function digName(t) { var x = DIG[t]; return x ? x[0] : \"tipo \" + t; } function fetchJson(url, cf) { var ctl = window.AbortController ? new AbortController() : null; var opt = {credentials: \"omit\"}; if (cf) { opt.headers = {\"accept\": \"application\/dns-json\"}; } if (ctl) { opt.signal = ctl.signal; } var timer = setTimeout(function () { if (ctl) { ctl.abort(); } }, 9000); return fetch(url, opt).then(function (r) { clearTimeout(timer); return r.json(); }, function (e) { clearTimeout(timer); throw e; }); } function rows(x) { var o = []; var a = or(x, []); for (var i = 0; i !== a.length; i++) { o.push({n: nm(a[i].name), t: a[i].type, ttl: a[i].TTL, d: String(or(a[i].data, \"\")).trim()}); } return o; } async function ask(r, name, type, cd) { try { var j = await fetchJson(r.url + encodeURIComponent(name) + AMP + \"type=\" + type + (cd ? AMP + \"do=1\" + AMP + \"cd=1\" : \"\"), r.cf); var cm = j.Comment; if (cm ? typeof cm !== \"string\" : false) { cm = cm.join(\" \"); } return {st: typeof j.Status === \"number\" ? j.Status : -1, ad: j.AD === true, ans: rows(j.Answer), au: rows(j.Authority), cm: String(or(cm, \"\"))}; } catch (e) { return {st: -1, ad: false, ans: [], au: [], cm: \"\"}; } } async function askAny(name, type) { var r = await ask(RES[0], name, type, true); if (r.st === -1) { r = await ask(RES[1], name, type, true); } return r; } function clean(v) { var s = String(or(v, \"\")).trim().toLowerCase(); var p = s.indexOf(S2); if (p !== -1) { s = s.slice(p + 2); } var cut = [\"\/\", \"?\", \"#\", \" \"]; for (var i = 0; i !== cut.length; i++) { var k = s.indexOf(cut[i]); if (k !== -1) { s = s.slice(0, k); } } var at = s.lastIndexOf(\"@\"); if (at !== -1) { s = s.slice(at + 1); } var co = s.indexOf(\":\"); if (co !== -1) { s = s.slice(0, co); } while (s.charAt(s.length - 1) === \".\") { s = s.slice(0, -1); } while (s.charAt(0) === \".\") { s = s.slice(1); } if (!s) { return {err: \"Digite um dom\"+U(237)+\"nio, como seusite.com.br.\"}; } var show = s; var ascii = true; for (var c = 0; c !== s.length; c++) { if (gt(s.charCodeAt(c), 127)) { ascii = false; } } if (!ascii) { try { s = new URL(\"http:\" + S2 + s).hostname; } catch (e) { return {err: show + \" n\"+U(227)+\"o \"+U(233)+\" um nome de dom\"+U(237)+\"nio v\"+U(225)+\"lido.\"}; } } if (s.indexOf(\"www.\") === 0 ? gt(s.split(\".\").length, 2) : false) { s = s.slice(4); if (show.indexOf(\"www.\") === 0) { show = show.slice(4); } } var L = s.split(\".\"); if (lt(L.length, 2)) { return {err: \"Digite o dom\"+U(237)+\"nio completo, com a extens\"+U(227)+\"o, como seusite.com.br.\"}; } if (gt(s.length, 253)) { return {err: \"O nome passa de 253 caracteres, o limite do DNS.\"}; } var num = true; for (var j = 0; j !== L.length; j++) { var lab = L[j]; if (!lab ? true : gt(lab.length, 63)) { return {err: show + \" n\"+U(227)+\"o \"+U(233)+\" um nome de dom\"+U(237)+\"nio v\"+U(225)+\"lido.\"}; } if (lab.charAt(0) === \"-\" ? true : lab.charAt(lab.length - 1) === \"-\") { return {err: show + \" n\"+U(227)+\"o \"+U(233)+\" um nome de dom\"+U(237)+\"nio v\"+U(225)+\"lido.\"}; } for (var q = 0; q !== lab.length; q++) { if (!has(HOST, lab.charAt(q))) { return {err: show + \" n\"+U(227)+\"o \"+U(233)+\" um nome de dom\"+U(237)+\"nio v\"+U(225)+\"lido: tem um caractere que n\"+U(227)+\"o pode aparecer em dom\"+U(237)+\"nios.\"}; } if (!has(DIGS, lab.charAt(q))) { num = false; } } } if (num) { return {err: \"Digite um dom\"+U(237)+\"nio, e n\"+U(227)+\"o um endere\"+U(231)+\"o IP. O DNSSEC vale para nomes de dom\"+U(237)+\"nio.\"}; } return {name: s, show: show}; } function b64(s) { try { var bin = atob(String(s).split(\" \").join(\"\")); var o = []; for (var i = 0; i !== bin.length; i++) { o.push(bin.charCodeAt(i)); } return o; } catch (e) { return null; } } function keyTag(rd) { var ac = 0; for (var i = 0; i !== rd.length; i++) { ac += i % 2 === 0 ? rd[i] * 256 : rd[i]; } ac += Math.floor(ac \/ 65536) % 65536; return ac % 65536; } function parseKey(d) { var p = d.split(\" \"); if (lt(p.length, 4)) { return null; } var f = parseInt(p[0], 10); var pr = parseInt(p[1], 10); var a = parseInt(p[2], 10); var kb = b64(p.slice(3).join(\"\")); if (!kb ? true : isNaN(f + pr + a)) { return null; } var rd = [Math.floor(f \/ 256), f % 256, pr, a].concat(kb); return {flags: f, alg: a, rd: rd, tag: keyTag(rd), sep: f % 2 === 1, zone: Math.floor(f \/ 256) % 2 === 1, rev: Math.floor(f \/ 128) % 2 === 1}; } function parseDs(d) { var p = d.split(\" \"); if (lt(p.length, 4)) { return null; } var t = parseInt(p[0], 10); var a = parseInt(p[1], 10); var dt = parseInt(p[2], 10); if (isNaN(t + a + dt)) { return null; } return {tag: t, alg: a, dt: dt, dig: p.slice(3).join(\"\").toLowerCase()}; } function tm(x) { x = String(x); if (x.length === 14) { return Date.UTC(parseInt(x.slice(0, 4), 10), parseInt(x.slice(4, 6), 10) - 1, parseInt(x.slice(6, 8), 10), parseInt(x.slice(8, 10), 10), parseInt(x.slice(10, 12), 10), parseInt(x.slice(12, 14), 10)) \/ 1000; } return parseInt(x, 10); } function parseSig(d) { var p = d.split(\" \"); if (lt(p.length, 8)) { return null; } return {cov: p[0].toLowerCase(), alg: parseInt(p[1], 10), ottl: parseInt(p[3], 10), exp: tm(p[4]), inc: tm(p[5]), tag: parseInt(p[6], 10), signer: nm(p[7])}; } function wire(z) { var o = []; if (z !== \".\") { var L = z.split(\".\"); for (var i = 0; i !== L.length; i++) { o.push(L[i].length); for (var k = 0; k !== L[i].length; k++) { o.push(L[i].charCodeAt(k)); } } } o.push(0); return o; } function hexs(buf) { var b = new Uint8Array(buf); var s = \"\"; for (var i = 0; i !== b.length; i++) { s += (\"0\" + b[i].toString(16)).slice(-2); } return s; } async function dsCheck(zone, d, keys) { var cand = null; for (var i = 0; i !== keys.length; i++) { var k = keys[i]; if (k.tag === d.tag ? k.alg === d.alg : false) { cand = k; var h = HASH[d.dt]; var sub = window.crypto ? window.crypto.subtle : null; if (!h ? true : !sub) { return {st: \"unk\", key: k}; } try { var buf = await sub.digest(h, new Uint8Array(wire(zone).concat(k.rd))); if (hexs(buf) === d.dig) { return {st: \"ok\", key: k}; } } catch (e) { return {st: \"unk\", key: k}; } } } return {st: cand ? \"bad\" : \"none\", key: cand}; } async function zoneInfo(z) { var r = await Promise.all([askAny(z, 48), z === \".\" ? null : askAny(z, 43)]); var kr = r[0]; var dr = r[1]; var o = {z: z, keys: [], ksig: [], ds: [], chk: [], dsig: [], dsTtl: 0, kst: kr.st, dst: dr ? dr.st : 0}; for (var i = 0; i !== kr.ans.length; i++) { var a = kr.ans[i]; if (a.n !== z) { continue; } if (a.t === 48) { var k = parseKey(a.d); if (k) { o.keys.push(k); } } if (a.t === 46) { var s = parseSig(a.d); if (s ? s.cov === \"dnskey\" : false) { o.ksig.push(s); } } } if (dr) { for (var j = 0; j !== dr.ans.length; j++) { var b = dr.ans[j]; if (b.n !== z) { continue; } if (b.t === 43) { var d = parseDs(b.d); if (d) { o.ds.push(d); o.dsTtl = b.ttl; } } if (b.t === 46) { var s2 = parseSig(b.d); if (s2 ? s2.cov === \"ds\" : false) { o.dsig.push(s2); if (s2.ottl) { o.dsTtl = s2.ottl; } } } } } for (var m = 0; m !== o.ds.length; m++) { o.chk.push(await dsCheck(z, o.ds[m], o.keys)); } o.match = 0; for (var n = 0; n !== o.chk.length; n++) { if (o.chk[n].st === \"ok\") { o.match++; } } return o; } async function findApex(name) { var cur = name; for (var n = 0; n !== 12; n++) { var r = await askAny(cur, 6); if (r.st === -1) { return {v: \"fail\"}; } if (r.st === 3) { return {v: \"nx\"}; } if (r.st !== 0) { return {v: \"srv\"}; } var cn = false; var soa = false; for (var i = 0; i !== r.ans.length; i++) { if (r.ans[i].n === cur) { if (r.ans[i].t === 5) { cn = true; } if (r.ans[i].t === 6) { soa = true; } } } if (soa ? !cn : false) { return {apex: cur}; } var hint = \"\"; for (var k = 0; k !== r.au.length; k++) { if (r.au[k].t === 6) { hint = r.au[k].n; } } if (cn ? false : (hint ? (hint !== cur ? (hint !== \".\" ? ends(cur, hint) : false) : false) : false)) { cur = hint; continue; } var p = parent(cur); if (!p ? true : p === \".\") { return {v: \"nx\"}; } cur = p; } return {v: \"fail\"}; } function sigNotes(N, label, sigs, now) { if (!sigs.length) { return null; } var s = sigs[0]; for (var i = 1; i !== sigs.length; i++) { if (gt(sigs[i].exp, s.exp)) { s = sigs[i]; } } if (lt(s.exp, now)) { N.push([\"err\", \"A assinatura do registro \" + label + \" venceu em \" + fmtDate(s.exp) + \". Os resolvedores recusam assinaturas vencidas: a zona precisa ser assinada de novo.\"]); } else if (lt(s.exp - now, 3 * 86400) ? gt(s.exp - s.inc, 7 * 86400) : false) { N.push([\"warn\", \"A assinatura do registro \" + label + \" vence em \" + dur(s.exp - now) + \", em \" + fmtDate(s.exp) + \". O servidor DNS costuma renovar antes disso. Se n\"+U(227)+\"o renovar, o dom\"+U(237)+\"nio sai do ar para quem valida DNSSEC.\"]); } if (gt(s.inc, now + 3600)) { N.push([\"warn\", \"A assinatura do registro \" + label + \" s\"+U(243)+\" come\"+U(231)+\"a a valer em \" + fmtDate(s.inc) + \". Confira o rel\"+U(243)+\"gio do servidor DNS.\"]); } return s; } async function analyze(name) { var ap = await findApex(name); if (!ap.apex) { return ap; } var apex = ap.apex; var anc = []; var p = parent(apex); while (p ? p !== \".\" : false) { anc.push(p); p = parent(p); } var soas = await Promise.all(anc.map(function (x) { return askAny(x, 6); })); var chain = [\".\"]; for (var i = anc.length - 1; i !== -1; i--) { var isz = false; for (var k = 0; k !== soas[i].ans.length; k++) { if (soas[i].ans[k].t === 6 ? soas[i].ans[k].n === anc[i] : false) { isz = true; } } if (isz) { chain.push(anc[i]); } } chain.push(apex); var both = await Promise.all([Promise.all(chain.map(function (z) { return zoneInfo(z); })), ask(RES[0], apex, 6, false), ask(RES[1], apex, 6, false), askAny(apex, 6), askAny(apex, 51)]); var infos = both[0]; var vals = [both[1], both[2]]; var A = infos[infos.length - 1]; var P = infos[infos.length - 2]; var R = {apex: apex, chain: chain, infos: infos, vals: vals, A: A, P: P, N: [], br: ends(apex, \"br\")}; var now = Date.now() \/ 1000; var soaSig = []; for (var s = 0; s !== both[3].ans.length; s++) { var x = both[3].ans[s]; if (x.n === apex ? x.t === 46 : false) { var ps = parseSig(x.d); if (ps ? ps.cov === \"soa\" : false) { soaSig.push(ps); } } } R.n3 = null; for (var q = 0; q !== both[4].ans.length; q++) { var y = both[4].ans[q]; if (y.n === apex ? y.t === 51 : false) { var py = y.d.split(\" \"); R.n3 = {it: parseInt(py[2], 10), salt: or(py[3], \"-\")}; } } var net = 0; var bog = false; var ad = false; for (var v = 0; v !== 2; v++) { if (vals[v].st === -1) { net++; } else { if (vals[v].st === 2) { bog = true; } if (vals[v].ad) { ad = true; } } } var upOff = \"\"; for (var u = 1; u !== infos.length - 1; u++) { if (infos[u].keys.length === 0 ? infos[u].kst === 0 : false) { if (!upOff) { upOff = infos[u].z; } } } R.upOff = upOff; R.v = net === 2 ? \"fail\" : (bog ? \"bogus\" : (ad ? \"secure\" : (upOff ? \"tldoff\" : (A.ds.length ? \"unconf\" : (A.keys.length ? \"half\" : \"off\"))))); var N = R.N; var reg = R.br ? \"no Registro.br\" : \"no site onde o dom\"+U(237)+\"nio foi registrado\"; R.reg = reg; R.cause = \"\"; if (A.ds.length) { if (!A.keys.length) { R.cause = \"nokey\"; N.push([\"err\", \"H\"+U(225)+\" registro DS \" + emZ(P.z) + \", mas a zona \" + apex + \" n\"+U(227)+\"o publica nenhuma chave DNSKEY. Isso acontece quando o DNSSEC \"+U(233)+\" desligado no servidor DNS, ou quando o dom\"+U(237)+\"nio troca de servidor DNS, sem tirar o DS \" + reg + \".\"]); } else { for (var c = 0; c !== A.ds.length; c++) { var d = A.ds[c]; var ck = A.chk[c]; if (ck.st === \"none\" ? true : ck.st === \"bad\") { if (A.match) { N.push([\"warn\", \"O DS com tag \" + d.tag + \" n\"+U(227)+\"o corresponde a nenhuma chave publicada. Deve ser de uma chave antiga: remova-o \" + reg + \".\"]); } else { R.cause = \"nomatch\"; N.push([\"err\", \"O DS com tag \" + d.tag + \" n\"+U(227)+\"o corresponde a nenhuma chave publicada na zona\" + (ck.st === \"bad\" ? \": a tag bate com uma chave, mas o resumo \"+U(233)+\" diferente\" : \"\") + \". \"+U(201)+\" isso que quebra a valida\"+U(231)+U(227)+\"o. Troque o DS \" + reg + \" pelo da chave atual.\"]); } } if (ck.st === \"unk\") { N.push([\"info\", \"N\"+U(227)+\"o deu para conferir no navegador o DS com tag \" + d.tag + \", que usa resumo \" + digName(d.dt) + \".\"]); } if (d.dt === 1) { N.push([\"warn\", \"O DS com tag \" + d.tag + \" usa resumo SHA-1 (tipo 1). Desde a RFC 9905, de 2025, SHA-1 n\"+U(227)+\"o deve mais ser usado para criar DS. Cadastre um DS com SHA-256 (tipo 2) no lugar.\"]); } else if (DIG[d.dt] ? DIG[d.dt][1] === \"bad\" : false) { N.push([\"err\", \"O DS com tag \" + d.tag + \" usa resumo \" + digName(d.dt) + \", que os resolvedores n\"+U(227)+\"o aceitam mais.\"]); } } } } var seen = {}; for (var e = 0; e !== A.keys.length; e++) { var al = A.keys[e].alg; if (seen[al]) { continue; } seen[al] = true; var st = ALG[al] ? ALG[al][1] : \"unk\"; if (st === \"sha1\") { N.push([\"warn\", \"A zona \"+U(233)+\" assinada com \" + algFull(al) + \". Desde a RFC 9905, de 2025, algoritmos com SHA-1 n\"+U(227)+\"o devem mais ser usados para assinar. Troque pelo algoritmo 13 (ECDSA P-256 com SHA-256).\"]); } if (st === \"bad\") { N.push([\"err\", \"A zona \"+U(233)+\" assinada com \" + algFull(al) + \", que os resolvedores n\"+U(227)+\"o aceitam mais.\"]); } if (st === \"unk\") { N.push([\"info\", \"A zona usa o algoritmo \" + al + \", que a ferramenta n\"+U(227)+\"o reconhece.\"]); } } R.soaSig = sigNotes(N, \"SOA\", soaSig, now); R.keySig = sigNotes(N, \"DNSKEY\", A.ksig, now); if (R.soaSig ? lt(R.soaSig.exp, now) : false) { R.cause = R.cause ? R.cause : \"exp\"; } if (R.keySig ? lt(R.keySig.exp, now) : false) { R.cause = R.cause ? R.cause : \"exp\"; } if (R.n3) { if (gt(R.n3.it, 0)) { N.push([\"warn\", \"A zona usa NSEC3 com \" + R.n3.it + plural(R.n3.it, \" itera\"+U(231)+U(227)+\"o\", \" itera\"+U(231)+U(245)+\"es\") + \". A RFC 9276, de 2022, manda usar 0. Com mais, os resolvedores podem tratar a zona como se n\"+U(227)+\"o tivesse DNSSEC, ou recusar as respostas.\" + (R.v === \"secure\" ? \" O Google e a Cloudflare ainda aceitam, mas o ideal \"+U(233)+\" zerar as itera\"+U(231)+U(245)+\"es no servi\"+U(231)+\"o de DNS.\" : \"\")]); } if (R.n3.salt !== \"-\") { N.push([\"info\", \"A zona usa NSEC3 com salt. A RFC 9276 recomenda n\"+U(227)+\"o usar salt.\"]); } } if (vals[0].st !== -1 ? vals[1].st !== -1 : false) { var g2 = vals[0].st === 2; var c2 = vals[1].st === 2; if (g2 !== c2) { N.push([\"info\", \"O Google e a Cloudflare discordaram: \" + (g2 ? \"o Google recusou e a Cloudflare aceitou\" : \"a Cloudflare recusou e o Google aceitou\") + \" as respostas. Isso costuma indicar um algoritmo que s\"+U(243)+\" um deles suporta, ou um problema em parte dos servidores DNS do dom\"+U(237)+\"nio.\"]); } } if (net === 1) { N.push([\"info\", vals[0].st === -1 ? \"O Google n\"+U(227)+\"o respondeu. O resultado usa s\"+U(243)+\" a Cloudflare.\" : \"A Cloudflare n\"+U(227)+\"o respondeu. O resultado usa s\"+U(243)+\" o Google.\"]); } return R; } function notes(box, arr) { arr = arr.slice().sort(function (a, b) { return RANK[a[0]] - RANK[b[0]]; }); for (var i = 0; i !== arr.length; i++) { var c = COL[arr[i][0]]; var d = add(box, \"div\", \"\", \"background:\" + c[1] + \";border-left:4px solid \" + c[0] + \";border-radius:6px;padding:8px 11px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;\"); add(d, \"span\", c[2] + \" \", \"color:\" + c[0] + \";font-weight:800;\"); d.appendChild(document.createTextNode(arr[i][1])); } } function sub(p, text) { return add(p, \"div\", text, \"font-weight:800;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:18px 0 6px;\"); } function line(box, kind, title, detail, first) { var c = COL[kind]; var r = add(box, \"div\", \"\", \"display:flex;gap:10px;align-items:flex-start;padding:9px 0;\" + (first ? \"\" : \"border-top:1px solid #eef1f5;\")); add(r, \"span\", c[2], \"flex:0 0 22px;height:22px;border-radius:11px;background:\" + c[1] + \";color:\" + c[0] + \";font-weight:800;font-size:13px;line-height:22px;text-align:center;\"); var t = add(r, \"div\", \"\", \"min-width:0;flex:1 1 auto;\"); add(t, \"div\", title, \"font-weight:800;font-size:14.5px;color:#0F172A;overflow-wrap:anywhere;\"); if (detail) { add(t, \"div\", detail, \"font-size:13.5px;color:#334155;line-height:1.5;margin-top:1px;overflow-wrap:anywhere;\"); } return t; } function whiteBox(p) { return add(p, \"div\", \"\", \"background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:2px 14px;\"); } function mainAlg(info) { for (var i = 0; i !== info.chk.length; i++) { if (info.chk[i].st === \"ok\") { return info.chk[i].key.alg; } } return info.keys.length ? info.keys[0].alg : 0; } function ede(cm) { var i = cm.indexOf(\"EDE(\"); if (i === -1) { return \"\"; } var n = parseInt(cm.slice(i + 4), 10); return EDE[n] ? EDE[n] + \" (c\"+U(243)+\"digo \" + n + \")\" : \"c\"+U(243)+\"digo \" + n; } function verdict(c, R) { var d = R.apex === c.name ? c.show : R.apex; var okNames = []; for (var i = 0; i !== 2; i++) { if (R.vals[i].ad) { okNames.push(RES[i].name === \"Google\" ? \"do Google\" : \"da Cloudflare\"); } } var T = { secure: [\"ok\", \"DNSSEC ativo e funcionando\", \"A cadeia de confian\"+U(231)+\"a est\"+U(225)+\" completa, da raiz at\"+U(233)+\" \" + d + \", e \" + (okNames.length === 2 ? \"os resolvedores do Google e da Cloudflare confirmaram\" : \"o resolvedor \" + okNames[0] + \" confirmou\") + \" as assinaturas.\"], bogus: [\"err\", \"DNSSEC com erro\", \"Os resolvedores que validam DNSSEC recusam as respostas de \" + d + \". Para quem usa o DNS do Google, da Cloudflare ou de v\"+U(225)+\"rios provedores de internet, o site e o e-mail do dom\"+U(237)+\"nio ficam fora do ar.\"], off: [\"info\", \"DNSSEC desativado\", d + \" funciona normalmente, mas as respostas do DNS n\"+U(227)+\"o s\"+U(227)+\"o assinadas. N\"+U(227)+\"o h\"+U(225)+\" como confirmar que elas vieram do servidor certo.\"], half: [\"warn\", \"DNSSEC pela metade\", \"A zona \" + d + \" est\"+U(225)+\" assinada, mas falta o registro DS \" + emZ(R.P.z) + \". Sem ele, ningu\"+U(233)+\"m valida as assinaturas, e o dom\"+U(237)+\"nio funciona como se n\"+U(227)+\"o tivesse DNSSEC.\"], tldoff: [\"info\", \"A extens\"+U(227)+\"o .\" + R.upOff + \" n\"+U(227)+\"o usa DNSSEC\", \"Sem DNSSEC na extens\"+U(227)+\"o, n\"+U(227)+\"o h\"+U(225)+\" como montar a cadeia de confian\"+U(231)+\"a at\"+U(233)+\" \" + d + \". Isso s\"+U(243)+\" muda se o operador da extens\"+U(227)+\"o adotar o DNSSEC.\"], unconf: [\"warn\", \"DNSSEC n\"+U(227)+\"o confirmado\", \"H\"+U(225)+\" registro DS e chaves publicadas, mas os resolvedores n\"+U(227)+\"o confirmaram as assinaturas de \" + d + \". Veja os avisos abaixo.\"] }; return T[R.v]; } function nextStep(R) { var reg = R.reg; var ttl = R.A.dsTtl ? dur(R.A.dsTtl) : \"um ou dois dias\"; if (R.v === \"secure\") { return \"Nada a corrigir. Se for trocar o dom\"+U(237)+\"nio de servidor DNS, remova antes o DS \" + reg + \" e espere \" + ttl + \", o tempo que os resolvedores guardam o DS. Se a troca acontecer com o DS antigo ainda publicado, o dom\"+U(237)+\"nio sai do ar para quem valida DNSSEC.\"; } if (R.v === \"off\") { return R.br ? \"Com o DNS na hospedagem, ative o DNSSEC no cPanel, em Editor de Zona, e cadastre o DS no Registro.br. Na Cloudflare, o caminho \"+U(233)+\" o mesmo: ativar o DNSSEC l\"+U(225)+\" e cadastrar o DS. Quem usa os servidores DNS do pr\"+U(243)+\"prio Registro.br j\"+U(225)+\" tem o DNSSEC ligado automaticamente. O passo a passo est\"+U(225)+\" mais abaixo.\" : \"Ative o DNSSEC no servi\"+U(231)+\"o que responde pelo DNS do dom\"+U(237)+\"nio (no cPanel, em Editor de Zona) e cadastre o DS no site onde o dom\"+U(237)+\"nio foi registrado. O passo a passo est\"+U(225)+\" mais abaixo.\"; } if (R.v === \"half\") { return \"Copie os dados do DS no servi\"+U(231)+\"o de DNS (no cPanel, em Editor de Zona, bot\"+U(227)+\"o DNSSEC; na Cloudflare, no quadro DNSSEC) e cadastre-os \" + reg + \". Depois de publicado, rode o teste de novo.\"; } if (R.v === \"bogus\") { if (R.cause === \"nokey\" ? true : R.cause === \"nomatch\") { return \"Atualize o DS \" + reg + \" com os dados da chave atual ou, se o dom\"+U(237)+\"nio n\"+U(227)+\"o usa mais DNSSEC, remova o DS. At\"+U(233)+\" a corre\"+U(231)+U(227)+\"o, quem valida DNSSEC n\"+U(227)+\"o consegue acessar o dom\"+U(237)+\"nio. Depois da mudan\"+U(231)+\"a, os resolvedores podem levar at\"+U(233)+\" \" + ttl + \" para enxergar o DS novo.\"; } if (R.cause === \"exp\") { return \"A zona precisa ser assinada de novo pelo servi\"+U(231)+\"o de DNS. Se o dom\"+U(237)+\"nio n\"+U(227)+\"o usa mais DNSSEC, remova o DS \" + reg + \".\"; } return \"Compare o DS publicado \" + reg + \" com as chaves do servidor DNS e confira as assinaturas. Se n\"+U(227)+\"o encontrar o erro, remover o DS faz o dom\"+U(237)+\"nio voltar a funcionar, sem DNSSEC, depois que o DS sai do cache dos resolvedores, em at\"+U(233)+\" \" + ttl + \".\"; } if (R.v === \"unconf\") { return \"Na maioria dos casos, a sa\"+U(237)+\"da \"+U(233)+\" gerar novas chaves com o algoritmo 13 (ECDSA P-256 com SHA-256) e trocar o DS \" + reg + \".\"; } return \"\"; } function render(c, R) { var out = el(\"out\"); out.textContent = \"\"; var simple = {nx: [\"info\", \"Dom\"+U(237)+\"nio n\"+U(227)+\"o encontrado\", c.show + \" n\"+U(227)+\"o existe no DNS. Confira se o nome est\"+U(225)+\" certo e se o registro do dom\"+U(237)+\"nio est\"+U(225)+\" ativo.\"], srv: [\"err\", \"Os servidores DNS do dom\"+U(237)+\"nio n\"+U(227)+\"o responderam\", \"Nem com a valida\"+U(231)+U(227)+\"o desligada deu para obter uma resposta de \" + c.show + \". O problema est\"+U(225)+\" nos servidores DNS do dom\"+U(237)+\"nio, e n\"+U(227)+\"o no DNSSEC.\"], fail: [\"err\", \"N\"+U(227)+\"o deu para consultar\", DNSFAIL]}; var V = simple[R.v] ? simple[R.v] : verdict(c, R); var col = COL[V[0]]; var card = add(out, \"div\", \"\", \"background:\" + col[1] + \";border:1px solid \" + col[0] + \";border-radius:12px;padding:14px 16px;margin-top:12px;\"); card.id = PFX + \"verdict\"; card.setAttribute(\"data-v\", R.v); add(card, \"div\", col[2] + \" \" + V[1], \"font-size:17px;font-weight:800;color:\" + col[0] + \";line-height:1.35;overflow-wrap:anywhere;\"); add(card, \"div\", V[2], \"font-size:14px;color:#0F172A;margin-top:4px;line-height:1.5;overflow-wrap:anywhere;\"); if (simple[R.v]) { return; } if (R.apex !== c.name) { add(card, \"div\", \"O DNSSEC \"+U(233)+\" configurado na zona \" + R.apex + \", que inclui \" + c.show + \".\", \"font-size:13.5px;color:#334155;margin-top:6px;line-height:1.5;overflow-wrap:anywhere;\"); } sub(out, \"Cadeia de confian\"+U(231)+\"a\"); var box = whiteBox(out); box.id = PFX + \"chain\"; for (var i = 0; i !== R.infos.length; i++) { var I = R.infos[i]; var parts = []; var kind = \"ok\"; if (I.z === \".\") { if (I.keys.length) { var rk = I.ksig.length ? I.ksig[0].tag : 0; parts.push(\"assinada\" + (rk ? \" com a chave \" + rk + (ROOTK[rk] ? \" (\" + ROOTK[rk] + \")\" : \"\") : \"\")); parts.push(\"ponto de partida da valida\"+U(231)+U(227)+\"o\"); } else { kind = \"info\"; parts.push(\"chaves n\"+U(227)+\"o consultadas\"); } line(box, kind, \"Raiz (.)\", parts.join(DOT), i === 0); continue; } var pz = emZ(R.infos[i - 1].z); if (I.kst === -1 ? true : I.dst === -1) { line(box, \"info\", I.z, \"n\"+U(227)+\"o deu para consultar\", false); continue; } if (I.ds.length) { parts.push(I.match ? \"DS \" + pz + \" confere com a chave\" : (I.keys.length ? \"DS \" + pz + \" n\"+U(227)+\"o confere com as chaves\" : \"DS \" + pz + \", mas a zona n\"+U(227)+\"o tem chaves\")); } else { parts.push(\"sem DS \" + pz); } parts.push(I.keys.length ? \"assinada com \" + algName(mainAlg(I)) : \"n\"+U(227)+\"o assinada\"); if (I.ds.length) { kind = I.match ? \"ok\" : \"err\"; } else { kind = I.keys.length ? \"warn\" : \"off\"; } line(box, kind, I.z === R.apex ? I.z + \" (seu dom\"+U(237)+\"nio)\" : I.z, parts.join(DOT), false); } var A = R.A; sub(out, \"Detalhes de \" + R.apex); var det = whiteBox(out); det.id = PFX + \"det\"; var t1 = line(det, A.ds.length ? (A.match ? \"ok\" : \"err\") : \"off\", \"Registro DS \" + emZ(R.P.z), A.ds.length ? \"O DS fica na zona de cima e aponta para a chave do dom\"+U(237)+\"nio.\" + (A.dsTtl ? \" Os resolvedores guardam o DS por at\"+U(233)+\" \" + dur(A.dsTtl) + \".\" : \"\") : \"Nenhum DS publicado. Sem ele, a cadeia de confian\"+U(231)+\"a para em \" + zname(R.P.z) + \".\", true); for (var j = 0; j !== A.ds.length; j++) { var dd = A.ds[j]; var ck = A.chk[j]; var w = add(t1, \"div\", \"\", \"margin-top:8px;padding:8px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;\"); var mk = ck.st === \"ok\" ? [\"ok\", \"confere com a chave \" + ck.key.tag] : (ck.st === \"unk\" ? [\"info\", \"n\"+U(227)+\"o conferido\"] : [\"err\", \"n\"+U(227)+\"o confere com nenhuma chave\"]); add(w, \"div\", \"Tag \" + dd.tag + DOT + algName(dd.alg) + DOT + \"resumo \" + digName(dd.dt), \"font-size:13.5px;font-weight:700;color:#0F172A;\"); add(w, \"div\", COL[mk[0]][2] + \" \" + mk[1], \"font-size:13px;font-weight:700;color:\" + COL[mk[0]][0] + \";margin-top:2px;\"); add(w, \"div\", dd.dig, MONO + \"color:#334155;margin-top:3px;\"); } var t2 = line(det, A.keys.length ? \"ok\" : \"off\", \"Chaves (DNSKEY)\", A.keys.length ? A.keys.length + plural(A.keys.length, \" chave publicada na zona.\", \" chaves publicadas na zona.\") : \"A zona n\"+U(227)+\"o publica chaves DNSKEY.\", false); var one = A.keys.length === 1; for (var k = 0; k !== A.keys.length; k++) { var K = A.keys[k]; var role = K.rev ? \"revogada\" : (K.sep ? (one ? \"chave \"+U(250)+\"nica (CSK), assina chaves e registros\" : \"KSK, assina o conjunto de chaves\") : \"ZSK, assina os registros da zona\"); add(t2, \"div\", \"Tag \" + K.tag + DOT + role + DOT + algFull(K.alg), \"font-size:13.5px;color:#0F172A;margin-top:5px;overflow-wrap:anywhere;\"); } var sg = []; if (R.soaSig) { sg.push([\"SOA\", R.soaSig]); } if (R.keySig) { sg.push([\"DNSKEY\", R.keySig]); } var nowS = Date.now() \/ 1000; var t3 = line(det, sg.length ? (lt(sg[0][1].exp, nowS) ? \"err\" : \"ok\") : \"off\", \"Assinaturas (RRSIG)\", sg.length ? \"\" : \"Nenhuma assinatura encontrada.\", false); for (var g = 0; g !== sg.length; g++) { var S = sg[g][1]; var left = S.exp - nowS; add(t3, \"div\", \"Registro \" + sg[g][0] + \": \" + (lt(left, 0) ? \"venceu em \" + fmtDate(S.exp) : \"v\"+U(225)+\"lida at\"+U(233)+\" \" + fmtDate(S.exp) + \" (faltam \" + dur(left) + \")\"), \"font-size:13.5px;color:\" + (lt(left, 0) ? COL.err[0] : \"#0F172A\") + \";margin-top:3px;\"); } if (R.n3) { line(det, gt(R.n3.it, 0) ? \"warn\" : \"ok\", \"Prova de inexist\"+U(234)+\"ncia\", \"NSEC3\" + DOT + R.n3.it + plural(R.n3.it, \" itera\"+U(231)+U(227)+\"o\", \" itera\"+U(231)+U(245)+\"es\") + DOT + (R.n3.salt === \"-\" ? \"sem salt\" : \"com salt\"), false); } var t5 = line(det, R.v === \"bogus\" ? \"err\" : (R.v === \"secure\" ? \"ok\" : \"off\"), \"Resolvedores que validam\", \"\", false); for (var v = 0; v !== 2; v++) { var X = R.vals[v]; var txt = X.st === -1 ? \"n\"+U(227)+\"o respondeu\" : (X.st === 2 ? \"recusou a resposta (SERVFAIL)\" : (X.ad ? \"validou as assinaturas\" : (R.v === \"unconf\" ? \"respondeu, mas n\"+U(227)+\"o confirmou as assinaturas\" : \"respondeu sem validar, porque o dom\"+U(237)+\"nio n\"+U(227)+\"o tem DNSSEC completo\"))); var why = X.st === 2 ? ede(X.cm) : \"\"; add(t5, \"div\", RES[v].name + \" (\" + RES[v].ip + \"): \" + txt + (why ? \". Motivo informado: \" + why : \"\") + \".\", \"font-size:13.5px;color:#0F172A;margin-top:3px;\"); } var nb = add(out, \"div\", \"\"); nb.id = PFX + \"notes\"; notes(nb, R.N); var ns = nextStep(R); if (ns) { var nx = add(out, \"div\", \"\", \"margin-top:14px;border:1px solid #c9d2dd;border-left:6px solid \" + NAVY + \";border-radius:10px;padding:11px 14px;background:#ffffff;\"); nx.id = PFX + \"next\"; add(nx, \"div\", \"O que fazer\", \"font-weight:800;font-size:15px;color:\" + NAVY + \";margin-bottom:3px;\"); add(nx, \"div\", ns, \"font-size:14px;line-height:1.55;color:#0F172A;\"); } } async function run() { if (busy) { return; } var c = clean(el(\"in\").value); var st = el(\"st\"); var out = el(\"out\"); if (c.err) { out.textContent = \"\"; st.textContent = c.err; st.style.color = COL.err[0]; return; } busy = true; el(\"go\").disabled = true; el(\"go\").textContent = \"Verificando\" + ELL; st.style.color = \"#475569\"; st.textContent = \"Consultando a cadeia de confian\"+U(231)+\"a de \" + c.show + ELL; out.textContent = \"\"; var R; try { R = await analyze(c.name); } catch (e) { R = {v: \"fail\"}; } st.textContent = \"\"; render(c, R); busy = false; el(\"go\").disabled = false; el(\"go\").textContent = \"Verificar\"; } add(root0, \"div\", \"Verificador de DNSSEC\", \"font-weight:800;font-size:19px;color:\" + NAVY + \";margin-bottom:4px;\"); add(root0, \"p\", \"Digite um dom\"+U(237)+\"nio para ver se o DNSSEC est\"+U(225)+\" ativo, se a cadeia de confian\"+U(231)+\"a est\"+U(225)+\" completa da raiz at\"+U(233)+\" ele e se o registro DS confere com as chaves publicadas.\", \"margin:0 0 12px;line-height:1.5;font-size:14.5px;\"); var lab = add(root0, \"label\", \"Dom\"+U(237)+\"nio\", \"display:block;font-weight:700;font-size:14px;color:\" + NAVY + \";margin-bottom:4px;\"); lab.setAttribute(\"for\", PFX + \"in\"); var frow = add(root0, \"div\", \"\", \"display:flex;flex-wrap:wrap;gap:8px;\"); var inp = add(frow, \"input\", \"\", \"flex:1 1 220px;min-width:0;box-sizing:border-box;padding:9px 11px;border:1px solid #9aa7b8;border-radius:8px;font-size:15px;background:#ffffff;color:#0F172A;margin:0;\"); inp.id = PFX + \"in\"; inp.type = \"text\"; inp.setAttribute(\"placeholder\", \"seudominio.com.br\"); inp.setAttribute(\"autocomplete\", \"off\"); inp.setAttribute(\"spellcheck\", \"false\"); inp.setAttribute(\"autocapitalize\", \"off\"); inp.setAttribute(\"inputmode\", \"url\"); var go = add(frow, \"button\", \"Verificar\", \"padding:9px 18px;border:1px solid \" + NAVY + \";background:\" + NAVY + \";color:#ffffff;border-radius:8px;cursor:pointer;font-size:14.5px;font-weight:700;margin:0;\"); go.id = PFX + \"go\"; go.type = \"button\"; var exl = add(root0, \"div\", \"\", \"margin-top:8px;font-size:13px;color:#334155;line-height:1.9;\"); exl.appendChild(document.createTextNode(\"Exemplos: \")); var EXS = [\"registro.br\", \"google.com\", \"dnssec-failed.org\"]; for (var x0 = 0; x0 !== EXS.length; x0++) { var eb = add(exl, \"button\", EXS[x0], \"margin:2px;padding:3px 8px;border:1px solid \" + NAVY + \";background:#ffffff;color:\" + NAVY + \";border-radius:6px;cursor:pointer;font-size:12.5px;\"); eb.type = \"button\"; eb.setAttribute(\"data-d\", EXS[x0]); eb.addEventListener(\"click\", function () { inp.value = this.getAttribute(\"data-d\"); run(); }); } var st0 = add(root0, \"div\", \"\", \"margin-top:10px;font-size:13.5px;color:#475569;min-height:18px;\"); st0.id = PFX + \"st\"; st0.setAttribute(\"aria-live\", \"polite\"); var out0 = add(root0, \"div\", \"\"); out0.id = PFX + \"out\"; out0.setAttribute(\"aria-live\", \"polite\"); add(root0, \"p\", \"A consulta usa o DNS p\"+U(250)+\"blico do Google (8.8.8.8) e da Cloudflare (1.1.1.1), que validam DNSSEC. A ferramenta tamb\"+U(233)+\"m confere, no seu navegador, se o DS bate com as chaves publicadas e at\"+U(233)+\" quando as assinaturas valem.\", \"margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.5;\"); go.addEventListener(\"click\", run); inp.addEventListener(\"keydown\", function (e) { if (e.key === \"Enter\") { run(); } }); })();<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 DNSSEC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando algu\u00e9m digita o endere\u00e7o do seu site, um resolvedor de DNS, como o do provedor de internet ou o <a href=\"https:\/\/www.homehost.com.br\/blog\/internet\/dns-do-google\/\">DNS do Google<\/a>, descobre o IP do servidor e guarda a resposta em cache. O DNS original n\u00e3o tem como provar de onde veio essa resposta. Um atacante que consiga colocar uma resposta falsa no cache, no ataque chamado envenenamento de cache, manda os visitantes para um site falso ou desvia os e-mails do dom\u00ednio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O DNSSEC (Domain Name System Security Extensions) resolve isso com assinaturas digitais. Quem responde pelo dom\u00ednio assina os registros com uma chave privada e publica a chave p\u00fablica no pr\u00f3prio DNS. O resolvedor confere a assinatura antes de usar a resposta e, se ela n\u00e3o bate, descarta a resposta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O DNSSEC garante duas coisas: que a resposta veio de quem responde pelo dom\u00ednio e que ela n\u00e3o foi alterada no caminho. Ele n\u00e3o faz o resto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>N\u00e3o criptografa as consultas.<\/strong> Quem est\u00e1 no caminho ainda v\u00ea quais dom\u00ednios voc\u00ea consulta. Isso \u00e9 papel do DNS sobre HTTPS (DoH) e do DNS sobre TLS (DoT).<\/li>\n\n\n\n<li><strong>N\u00e3o substitui o certificado SSL.<\/strong> O DNSSEC protege o endere\u00e7o, e o <a href=\"https:\/\/www.homehost.com.br\/blog\/ssl\/certificado-ssl\/\">certificado SSL<\/a> protege a conex\u00e3o com o site. Os dois se complementam.<\/li>\n\n\n\n<li><strong>N\u00e3o protege a conta do dom\u00ednio.<\/strong> Quem invade a sua conta no Registro.br consegue trocar os servidores DNS e o DS. Para isso, o que vale \u00e9 senha forte e autentica\u00e7\u00e3o em dois fatores.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Como funciona a cadeia de confian\u00e7a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O DNSSEC usa quatro tipos de registro:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Registro<\/th><th>Onde fica<\/th><th>Para que serve<\/th><\/tr><\/thead><tbody><tr><td>DNSKEY<\/td><td>Na zona do dom\u00ednio<\/td><td>Publica as chaves p\u00fablicas da zona<\/td><\/tr><tr><td>RRSIG<\/td><td>Na zona do dom\u00ednio<\/td><td>Guarda a assinatura de cada conjunto de registros<\/td><\/tr><tr><td>DS<\/td><td>Na zona de cima, como a com.br<\/td><td>Aponta para a chave do dom\u00ednio e liga um elo da cadeia ao outro<\/td><\/tr><tr><td>NSEC ou NSEC3<\/td><td>Na zona do dom\u00ednio<\/td><td>Prova, com assinatura, que um nome n\u00e3o existe<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A valida\u00e7\u00e3o come\u00e7a pela raiz da internet, cuja chave j\u00e1 vem configurada nos resolvedores. A raiz assina o DS do .br, o .br assina o DS do com.br, e o com.br assina o DS do seu dom\u00ednio. O DS confere com a chave publicada no DNSKEY do dom\u00ednio, e essa chave assina os registros. Se um elo falha, o resolvedor recusa a resposta inteira.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/cadeia-de-confianca-dnssec-777x1024.png\" alt=\"Infogr\u00e1fico da cadeia de confian\u00e7a do DNSSEC, da raiz ao .br, ao com.br e ao dom\u00ednio, com o registro DS ligando cada etapa e o resultado quando tudo confere ou quando um elo falha\" class=\"wp-image-18627\" width=\"777\" height=\"1024\" srcset=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/cadeia-de-confianca-dnssec-777x1024.png 777w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/cadeia-de-confianca-dnssec-228x300.png 228w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/cadeia-de-confianca-dnssec-768x1013.png 768w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/cadeia-de-confianca-dnssec.png 1092w\" sizes=\"(max-width: 777px) 100vw, 777px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Muitas zonas usam duas chaves: a KSK, que assina s\u00f3 o conjunto de chaves e \u00e9 para onde o DS aponta, e a ZSK, que assina os demais registros. Outras usam uma chave \u00fanica, a CSK, que faz as duas coisas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A raiz tamb\u00e9m troca de chave de tempos em tempos. Em 11 de outubro de 2026, ela passou a ser assinada s\u00f3 com a chave KSK-2024, de tag 38696, segundo a <a href=\"https:\/\/www.icann.org\/en\/blogs\/details\/preparing-for-the-root-zone-ksk-rollover-what-you-need-to-know-27-07-2026-en\">ICANN<\/a>. \u00c9 a chave que aparece na primeira linha da cadeia no verificador.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que significa cada resultado<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Resultado<\/th><th>O que quer dizer<\/th><th>O que fazer<\/th><\/tr><\/thead><tbody><tr><td>DNSSEC ativo e funcionando<\/td><td>A cadeia est\u00e1 completa e os resolvedores confirmaram as assinaturas<\/td><td>Nada. S\u00f3 tome cuidado ao trocar de servidor DNS<\/td><\/tr><tr><td>DNSSEC desativado<\/td><td>O dom\u00ednio n\u00e3o tem DS nem chaves<\/td><td>Ativar, se quiser a prote\u00e7\u00e3o<\/td><\/tr><tr><td>DNSSEC pela metade<\/td><td>A zona est\u00e1 assinada, mas falta o DS<\/td><td>Cadastrar o DS no registro do dom\u00ednio<\/td><\/tr><tr><td>DNSSEC com erro<\/td><td>Os resolvedores recusam as respostas<\/td><td>Corrigir ou remover o DS com urg\u00eancia<\/td><\/tr><tr><td>DNSSEC n\u00e3o confirmado<\/td><td>H\u00e1 DS e chaves, mas a valida\u00e7\u00e3o n\u00e3o se completa, como acontece com algoritmos SHA-1<\/td><td>Refazer as chaves com o algoritmo 13<\/td><\/tr><tr><td>A extens\u00e3o n\u00e3o usa DNSSEC<\/td><td>A extens\u00e3o do dom\u00ednio n\u00e3o \u00e9 assinada<\/td><td>Nada a fazer no dom\u00ednio<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">O resultado com erro \u00e9 o mais grave. Para o resolvedor que valida DNSSEC, como o do Google, o da Cloudflare e o de v\u00e1rios provedores de internet, a resposta vira um erro SERVFAIL: o site n\u00e3o abre e os e-mails n\u00e3o chegam. Quem usa um resolvedor que n\u00e3o valida continua acessando, e \u00e9 por isso que o problema \u00e0s vezes parece acontecer s\u00f3 para parte dos usu\u00e1rios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como ativar o DNSSEC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A ativa\u00e7\u00e3o tem sempre duas partes: assinar a zona no servi\u00e7o que responde pelo DNS do dom\u00ednio e cadastrar o DS no registro do dom\u00ednio. O caminho depende de onde fica o DNS. Para saber quais s\u00e3o os servidores DNS do seu dom\u00ednio, consulte o registro NS no <a href=\"https:\/\/www.homehost.com.br\/blog\/internet\/nslookup\/\">nslookup online<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Com os servidores DNS do Registro.br<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o h\u00e1 nada a fazer. Nos servidores DNS do pr\u00f3prio Registro.br, o DNSSEC \u00e9 obrigat\u00f3rio e ativado automaticamente, segundo as <a href=\"https:\/\/registro.br\/tecnologia\/dnssec\/dns-e-dnssec\/\">perguntas sobre DNS e DNSSEC do Registro.br<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Com o DNS na hospedagem (cPanel)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se o dom\u00ednio usa os servidores DNS da hospedagem, a chave \u00e9 criada no cPanel:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>No cPanel, abra o <strong>Editor de Zona<\/strong> e clique em <strong>DNSSEC<\/strong> ao lado do dom\u00ednio.<\/li>\n\n\n\n<li>Crie a chave. Se houver a op\u00e7\u00e3o de escolher o algoritmo, use o 13 (ECDSA P-256 com SHA-256).<\/li>\n\n\n\n<li>Ative a chave e copie os dados do registro DS, principalmente o <strong>Key Tag<\/strong> e o <strong>Digest<\/strong> do tipo SHA-256.<\/li>\n\n\n\n<li>No painel do Registro.br, abra o dom\u00ednio e clique em <strong>Alterar servidores DNS<\/strong>, como no <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/como-transferir-seu-site\/como-alterar-o-dns-de-um-dominio-pelo-registro-br\/\">tutorial de troca de DNS no Registro.br<\/a>. Na mesma tela, use a op\u00e7\u00e3o <strong>DNSSEC<\/strong> para informar o Keytag e o Digest. O Registro.br confere o DS antes de publicar.<\/li>\n\n\n\n<li>Volte ao verificador e confira se o resultado mudou para DNSSEC ativo.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Com o DNS na Cloudflare<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na Cloudflare, o DNSSEC fica nas configura\u00e7\u00f5es de DNS do dom\u00ednio. Ao ativar, ela assina a zona com o algoritmo 13 e mostra os dados do registro DS, conforme a <a href=\"https:\/\/developers.cloudflare.com\/dns\/dnssec\/\">documenta\u00e7\u00e3o da Cloudflare<\/a>. Copie o Keytag e o Digest para o Registro.br, como no passo 4 acima, e confira o resultado no verificador.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dom\u00ednios fora do .br<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O processo \u00e9 o mesmo: assinar a zona no servi\u00e7o de DNS e cadastrar o DS no site onde o dom\u00ednio foi registrado. Alguns registradores leem o DS sozinhos. O registro de dom\u00ednios da pr\u00f3pria Cloudflare, por exemplo, publica o DS automaticamente, o que pode levar um ou dois dias.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cuidados para n\u00e3o tirar o dom\u00ednio do ar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O DNSSEC protege, mas tamb\u00e9m \u00e9 mais uma pe\u00e7a que pode quebrar. Os erros mais comuns s\u00e3o estes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trocar de servidor DNS com o DS antigo publicado.<\/strong> O novo servidor n\u00e3o tem as chaves para onde o DS aponta, e o dom\u00ednio sai do ar para quem valida. O certo \u00e9 remover o DS, esperar ele sair do <a href=\"https:\/\/www.homehost.com.br\/blog\/perguntas-frequentes\/o-que-e-propagacao-de-dns\/\">cache dos resolvedores<\/a>, trocar os servidores DNS e s\u00f3 ent\u00e3o ativar o DNSSEC no novo servi\u00e7o e cadastrar o DS novo. O verificador mostra esse tempo nos detalhes do DS: no .com.br, \u00e9 de uma hora, e no .com, de um dia.<\/li>\n\n\n\n<li><strong>Trocar a chave sem trocar o DS.<\/strong> Sempre que a chave muda, o DS precisa ser atualizado. Cadastre o DS novo antes de apagar a chave antiga.<\/li>\n\n\n\n<li><strong>Deixar as assinaturas vencerem.<\/strong> Cada assinatura tem data de validade. Os servi\u00e7os que assinam a zona automaticamente renovam sozinhos, mas uma zona assinada \u00e0 m\u00e3o para de funcionar quando elas vencem.<\/li>\n\n\n\n<li><strong>Usar algoritmos com SHA-1.<\/strong> A <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9905.html\">RFC 9905<\/a>, de novembro de 2025, pro\u00edbe os algoritmos 5 e 7 e o DS com resumo SHA-1 em assinaturas novas. Prefira o algoritmo 13 e o DS com SHA-256.<\/li>\n\n\n\n<li><strong>Usar NSEC3 com itera\u00e7\u00f5es.<\/strong> A <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9276.html\">RFC 9276<\/a> manda usar 0 itera\u00e7\u00f5es e recomenda n\u00e3o usar salt. Com valores maiores, os resolvedores podem tratar o dom\u00ednio como se n\u00e3o tivesse DNSSEC.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para desligar o DNSSEC, a ordem \u00e9 a inversa: primeiro remova o DS no registro do dom\u00ednio, espere ele sair do cache e s\u00f3 depois desative a assinatura no servi\u00e7o de DNS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">DNSSEC vale a pena?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para a maioria dos dom\u00ednios, sim, quando o servi\u00e7o de DNS cuida da assinatura sozinho, como o Registro.br, o cPanel e a Cloudflare. No Registro.br n\u00e3o h\u00e1 custo adicional, a ativa\u00e7\u00e3o \u00e9 r\u00e1pida, e a prote\u00e7\u00e3o vale para todos os visitantes que usam resolvedores que validam. E, entre os dom\u00ednios .br que usam DNSSEC, 99,93% est\u00e3o com a assinatura funcionando corretamente, segundo os mesmos dados do Registro.br.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O cuidado \u00e9 com as trocas: de servidor DNS, de chave e de hospedagem. Um erro nessas horas tira o dom\u00ednio do ar para boa parte dos usu\u00e1rios, o que n\u00e3o aconteceria sem DNSSEC.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em algumas <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/outros\/conheca-todas-as-categorias-do-registro-br\/\">categorias do Registro.br<\/a>, n\u00e3o \u00e9 escolha: o DNSSEC \u00e9 obrigat\u00f3rio nos dom\u00ednios .b.br, .bet.br, .def.br, .jus.br, .leg.br, .mp.br e .tc.br.<\/p>\n\n\n\n<div style=\"max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;\">\n<div style=\"font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;\">Dom\u00ednio e hospedagem na Homehost<\/div>\n<p style=\"margin:0 0 12px;line-height:1.6;font-size:15px;\">Registre o seu dom\u00ednio na Homehost e hospede o site com cPanel, onde o DNSSEC \u00e9 ativado pelo Editor de Zona.<\/p>\n<a href=\"https:\/\/www.homehost.com.br\/registro-de-dominio\/\" style=\"display:inline-block;margin:0 0 6px;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;\">Registrar dom\u00ednio<\/a>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O que \u00e9 DNSSEC?<\/strong><br>\u00c9 uma extens\u00e3o de seguran\u00e7a do DNS que assina digitalmente as respostas de um dom\u00ednio. Com ela, os resolvedores conseguem confirmar que a resposta veio de quem responde pelo dom\u00ednio e que n\u00e3o foi alterada, o que impede o envenenamento de cache.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como saber se o meu dom\u00ednio tem DNSSEC?<\/strong><br>Use o verificador desta p\u00e1gina. Ele mostra se o DNSSEC est\u00e1 ativo, desativado, pela metade ou com erro, e confere a cadeia de confian\u00e7a da raiz at\u00e9 o dom\u00ednio. No terminal, o comando dig com a op\u00e7\u00e3o +dnssec mostra as assinaturas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O DNSSEC \u00e9 obrigat\u00f3rio para dom\u00ednios .br?<\/strong><br>S\u00f3 nas categorias .b.br, .bet.br, .def.br, .jus.br, .leg.br, .mp.br e .tc.br. Nos demais dom\u00ednios .br, \u00e9 opcional e sem custo adicional. Quem usa os servidores DNS do Registro.br j\u00e1 tem o DNSSEC ativado automaticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O DNSSEC substitui o certificado SSL?<\/strong><br>N\u00e3o. O DNSSEC garante que o endere\u00e7o do dom\u00ednio \u00e9 verdadeiro, e o certificado SSL protege a conex\u00e3o entre o visitante e o site. Os dois se complementam, e nenhum deles criptografa as consultas de DNS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O que acontece se o DNSSEC der erro?<\/strong><br>Os resolvedores que validam DNSSEC, como os do Google e da Cloudflare, recusam as respostas do dom\u00ednio, e o site e os e-mails param de funcionar para quem usa esses resolvedores. A corre\u00e7\u00e3o \u00e9 atualizar o DS no registro do dom\u00ednio ou, em \u00faltimo caso, remov\u00ea-lo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Preciso desativar o DNSSEC para trocar de hospedagem?<\/strong><br>S\u00f3 se a troca incluir os servidores DNS do dom\u00ednio. Nesse caso, remova o DS no registro do dom\u00ednio, espere ele sair do cache, troque os servidores DNS e ative o DNSSEC de novo no novo servi\u00e7o. Se os servidores DNS continuarem os mesmos, nada muda.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"O que \u00e9 DNSSEC?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"\u00c9 uma extens\u00e3o de seguran\u00e7a do DNS que assina digitalmente as respostas de um dom\u00ednio. Com ela, os resolvedores conseguem confirmar que a resposta veio de quem responde pelo dom\u00ednio e que n\u00e3o foi alterada, o que impede o envenenamento de cache.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Como saber se o meu dom\u00ednio tem DNSSEC?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Use o verificador desta p\u00e1gina. Ele mostra se o DNSSEC est\u00e1 ativo, desativado, pela metade ou com erro, e confere a cadeia de confian\u00e7a da raiz at\u00e9 o dom\u00ednio. No terminal, o comando dig com a op\u00e7\u00e3o +dnssec mostra as assinaturas.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"O DNSSEC \u00e9 obrigat\u00f3rio para dom\u00ednios .br?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"S\u00f3 nas categorias .b.br, .bet.br, .def.br, .jus.br, .leg.br, .mp.br e .tc.br. Nos demais dom\u00ednios .br, \u00e9 opcional e sem custo adicional. Quem usa os servidores DNS do Registro.br j\u00e1 tem o DNSSEC ativado automaticamente.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"O DNSSEC substitui o certificado SSL?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"N\u00e3o. O DNSSEC garante que o endere\u00e7o do dom\u00ednio \u00e9 verdadeiro, e o certificado SSL protege a conex\u00e3o entre o visitante e o site. Os dois se complementam, e nenhum deles criptografa as consultas de DNS.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"O que acontece se o DNSSEC der erro?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Os resolvedores que validam DNSSEC, como os do Google e da Cloudflare, recusam as respostas do dom\u00ednio, e o site e os e-mails param de funcionar para quem usa esses resolvedores. A corre\u00e7\u00e3o \u00e9 atualizar o DS no registro do dom\u00ednio ou, em \u00faltimo caso, remov\u00ea-lo.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Preciso desativar o DNSSEC para trocar de hospedagem?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"S\u00f3 se a troca incluir os servidores DNS do dom\u00ednio. Nesse caso, remova o DS no registro do dom\u00ednio, espere ele sair do cache, troque os servidores DNS e ative o DNSSEC de novo no novo servi\u00e7o. Se os servidores DNS continuarem os mesmos, nada muda.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O DNSSEC fecha uma brecha antiga do DNS: a falta de um jeito de provar de onde vem uma resposta. Com a assinatura, os resolvedores descartam respostas falsas, e o dom\u00ednio fica protegido contra o envenenamento de cache. Ative pelo servi\u00e7o que cuida do seu DNS, cadastre o DS no registro do dom\u00ednio e use o verificador sempre que mexer em servidores DNS ou em chaves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O DNSSEC \u00e9 uma extens\u00e3o de seguran\u00e7a do DNS que assina digitalmente as respostas do seu dom\u00ednio, para que ningu\u00e9m consiga falsificar o endere\u00e7o para onde ele aponta. Com o verificador abaixo, voc\u00ea confere se o DNSSEC est\u00e1 ativo, se a cadeia de confian\u00e7a est\u00e1 completa e se o registro DS confere com as chaves [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":18626,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_helpful_status":1,"_lmt_disableupdate":"","_lmt_disable":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[223],"tags":[],"class_list":["post-18625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dominio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis | Homehost<\/title>\n<meta name=\"description\" content=\"Verificador de DNSSEC gr\u00e1tis: veja se o dom\u00ednio est\u00e1 protegido, entenda a cadeia de confian\u00e7a e ative no Registro.br, no cPanel ou na Cloudflare.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis | Homehost\" \/>\n<meta property=\"og:description\" content=\"Verificador de DNSSEC gr\u00e1tis: veja se o dom\u00ednio est\u00e1 protegido, entenda a cadeia de confian\u00e7a e ative no Registro.br, no cPanel ou na Cloudflare.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/\" \/>\n<meta property=\"og:site_name\" content=\"Homehost\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Homehost\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-06T19:38:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-06T19:39:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Gustavo Gallas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Homehost\" \/>\n<meta name=\"twitter:site\" content=\"@Homehost\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gustavo Gallas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/\"},\"author\":{\"name\":\"Gustavo Gallas\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/df8002f43fc55e7f4e132abb2a6ddbc4\"},\"headline\":\"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis\",\"datePublished\":\"2026-11-06T19:38:52+00:00\",\"dateModified\":\"2026-11-06T19:39:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/\"},\"wordCount\":2061,\"publisher\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/dnssec.png\",\"articleSection\":[\"Dom\u00ednio\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/\",\"name\":\"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis | Homehost\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/dnssec.png\",\"datePublished\":\"2026-11-06T19:38:52+00:00\",\"dateModified\":\"2026-11-06T19:39:02+00:00\",\"description\":\"Verificador de DNSSEC gr\u00e1tis: veja se o dom\u00ednio est\u00e1 protegido, entenda a cadeia de confian\u00e7a e ative no Registro.br, no cPanel ou na Cloudflare.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/dnssec.png\",\"contentUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/dnssec.png\",\"width\":1672,\"height\":941,\"caption\":\"Corrente com tr\u00eas elos ligando a raiz da internet, o servidor da extens\u00e3o e o site, com selos de cadeado que representam as assinaturas do DNSSEC\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/dominio\\\/dnssec\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/\",\"name\":\"Homehost\",\"description\":\"Hospedagem De Sites\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#organization\",\"name\":\"Homehost\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/logo-detalhes.png\",\"contentUrl\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/logo-detalhes.png\",\"width\":150,\"height\":48,\"caption\":\"Homehost\"},\"image\":{\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Homehost\\\/\",\"https:\\\/\\\/x.com\\\/Homehost\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.homehost.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/df8002f43fc55e7f4e132abb2a6ddbc4\",\"name\":\"Gustavo Gallas\",\"description\":\"Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do B\u00f3ris, seu pet de estima\u00e7\u00e3o. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos t\u00e9cnicos. Contato: gustavo.blog@homehost.com.br\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis | Homehost","description":"Verificador de DNSSEC gr\u00e1tis: veja se o dom\u00ednio est\u00e1 protegido, entenda a cadeia de confian\u00e7a e ative no Registro.br, no cPanel ou na Cloudflare.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/","og_locale":"pt_BR","og_type":"article","og_title":"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis | Homehost","og_description":"Verificador de DNSSEC gr\u00e1tis: veja se o dom\u00ednio est\u00e1 protegido, entenda a cadeia de confian\u00e7a e ative no Registro.br, no cPanel ou na Cloudflare.","og_url":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/","og_site_name":"Homehost","article_publisher":"https:\/\/www.facebook.com\/Homehost\/","article_published_time":"2026-11-06T19:38:52+00:00","article_modified_time":"2026-11-06T19:39:02+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png","type":"image\/png"}],"author":"Gustavo Gallas","twitter_card":"summary_large_image","twitter_creator":"@Homehost","twitter_site":"@Homehost","twitter_misc":{"Escrito por":"Gustavo Gallas","Est. tempo de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#article","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/"},"author":{"name":"Gustavo Gallas","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4"},"headline":"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis","datePublished":"2026-11-06T19:38:52+00:00","dateModified":"2026-11-06T19:39:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/"},"wordCount":2061,"publisher":{"@id":"https:\/\/www.homehost.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png","articleSection":["Dom\u00ednio"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/","url":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/","name":"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis | Homehost","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#primaryimage"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png","datePublished":"2026-11-06T19:38:52+00:00","dateModified":"2026-11-06T19:39:02+00:00","description":"Verificador de DNSSEC gr\u00e1tis: veja se o dom\u00ednio est\u00e1 protegido, entenda a cadeia de confian\u00e7a e ative no Registro.br, no cPanel ou na Cloudflare.","breadcrumb":{"@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#primaryimage","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png","width":1672,"height":941,"caption":"Corrente com tr\u00eas elos ligando a raiz da internet, o servidor da extens\u00e3o e o site, com selos de cadeado que representam as assinaturas do DNSSEC"},{"@type":"BreadcrumbList","@id":"https:\/\/www.homehost.com.br\/blog\/dominio\/dnssec\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.homehost.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"DNSSEC: o que \u00e9, como ativar e verificador gr\u00e1tis"}]},{"@type":"WebSite","@id":"https:\/\/www.homehost.com.br\/blog\/#website","url":"https:\/\/www.homehost.com.br\/blog\/","name":"Homehost","description":"Hospedagem De Sites","publisher":{"@id":"https:\/\/www.homehost.com.br\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.homehost.com.br\/blog\/#organization","name":"Homehost","url":"https:\/\/www.homehost.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2022\/10\/logo-detalhes.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2022\/10\/logo-detalhes.png","width":150,"height":48,"caption":"Homehost"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Homehost\/","https:\/\/x.com\/Homehost"]},{"@type":"Person","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4","name":"Gustavo Gallas","description":"Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do B\u00f3ris, seu pet de estima\u00e7\u00e3o. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos t\u00e9cnicos. Contato: gustavo.blog@homehost.com.br"}]}},"modified_by":"ad_hmhst","jetpack_featured_media_url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/11\/dnssec.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/18625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=18625"}],"version-history":[{"count":1,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/18625\/revisions"}],"predecessor-version":[{"id":18628,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/18625\/revisions\/18628"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media\/18626"}],"wp:attachment":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=18625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=18625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=18625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}