Skip to main content
Resilience Auditor — looks up when the site’s domain registration expires and flags renewals that are due.

Resilience

A lapsed domain takes the whole site, its email, and its certificates offline at once.

Coverage

RDAP where IANA lists a service, WHOIS everywhere else (.jp, .de, .cn, .io, .st, …).
This auditor extracts the hostname from the audited URL, asks the domain registry for the registration’s expiration date, and grades how many days remain. It never touches the web server: the answer comes from the registry, so the check works even when the site is down.

How it works

  1. Parse — takes the hostname of the audited URL and drops a leading www..
  2. RDAP — resolves the registry’s RDAP server from IANA’s bootstrap file and queries it. The expiration event supplies the date.
  3. WHOIS fallback — when the TLD has no RDAP service, when the RDAP answer carries no expiration event, or when the RDAP request fails, the auditor asks IANA for the registry’s WHOIS server and parses the port-43 answer. It understands the common registry formats (Verisign, JPRS, CNNIC, nic.st, TCI, Nominet, Registro.br).
  4. Subdomains — when a registry answers “not found” for help.example.co.jp, the auditor drops the leading label and retries with example.co.jp, down to the last two labels.
  5. Preference — when the registry publishes no date, or no registry answers, the expirationDate preference (if set) is graded instead. When the registry does publish a date, that date is graded and a preference that differs from it adds a WARNING.
  6. Rules — expired and expiring-within-30-days are separate FAILs; expiring-within-90-days and expiration-not-published are WARNINGs; no answer from any registry is an ERROR.
  7. Aggregate — ERROR wins, then FAIL, then WARNING; when every rule passes the audit is SUCCESS.
Each check carries domain, queried_domain, source (rdap, whois, or preference), server, and, when known, expiration_date and days_until_expiration. A date taken from the preference after every lookup failed also carries lookup_errors; the conflict warning also carries preferred_expiration_date.

Preferences

A value that is not a yyyy-MM-dd date is ignored and logged. A date from the preference is graded with the same thresholds as a registry date, so a forgotten preference turns into a FAIL once that date passes: update it after each renewal.

What it audits

Every row maps to one checkRule* method and one CheckCode. CheckCode suffixes use status ranges: 200 success, 300–399 warning, 400–499 fail, 500–599 error.

Output documentation

Risks and considerations

A lapsed domain is a full outage

  • When the registration expires the registry removes the delegation: the website, every subdomain, email delivery, and certificate renewals stop at the same time.
  • Many registries add a grace period, but redemption is expensive and some TLDs (for example .co.jp) simply delete the name.
  • Expired names are routinely picked up by squatters and resellers, which turns an outage into a permanent loss.

Registry coverage

  • IANA’s RDAP bootstrap does not list many country-code TLDs. The auditor falls back to WHOIS for those, but some registries (DENIC .de, SWITCH .ch, .nl) do not publish an expiration date at all and are reported as a WARNING so the owner can verify with the registrar and record the date in the expirationDate preference.
  • WHOIS answers are free text. A registry that changes its output format may stop being parsed; the resulting WARNING (301) is a prompt to review, not proof that the date is unavailable.
  • Registries rate-limit RDAP and WHOIS. Auditing the same domain many times per hour may yield an ERROR (500) until the limit resets.

Timing

  • Dates are compared with the day the audit runs, in UTC. A domain that expires later today is reported as expired.
  • Auto-renewal at the registrar does not change the date the registry publishes until the renewal is processed; a warning shortly before the auto-renewal date is expected.