背景与价值


CAA记录可限制允许颁发证书的CA并配置报告地址。正确配置能防止未经授权的证书签发并提升可审计性。


统一规范


  • issue:允许特定CA为该域颁发证书。
  • issuewild:允许特定CA为通配证书颁发(默认不建议)。
  • iodef:配置违规报告端点(mailto/https)。

核心实现


解析与校验(示意)


type CaaTag = 'issue' | 'issuewild' | 'iodef'
type CaaRecord = { tag: CaaTag; value: string }

const allowCa = new Set(['letsencrypt.org','digicert.com'])

function parseCaa(txt: string): CaaRecord[] {
  const out: CaaRecord[] = []
  for (const line of txt.split(/\r?\n/)) {
    const m = line.trim().match(/^(issue|issuewild|iodef)\s+"([^"]+)"$/)
    if (m) out.push({ tag: m[1] as CaaTag, value: m[2] })
  }
  return out
}

function validIssue(value: string): boolean { const d = value.split(';')[0].trim(); return allowCa.has(d) }
function validIodef(value: string): boolean { return /^mailto:[^\s@]+@[^\s@]+\.[^\s]+$/.test(value) || /^https:\/\//.test(value) }

function auditCaa(records: CaaRecord[]): { ok: boolean; problems: CaaRecord[] } {
  const problems: CaaRecord[] = []
  for (const r of records) {
    if (r.tag === 'issue' && !validIssue(r.value)) problems.push(r)
    if (r.tag === 'issuewild' && !validIssue(r.value)) problems.push(r)
    if (r.tag === 'iodef' && !validIodef(r.value)) problems.push(r)
  }
  return { ok: problems.length === 0, problems }
}

落地建议


  • 将允许颁发的CA收敛到白名单;慎用issuewild,默认不启用通配证书。
  • 配置iodef为mailto或https端点,启用违规报告与审计。

验证清单


  • CA是否命中白名单;报告端点格式是否有效;是否避免启用通配证书颁发。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部