This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
devopscritical PriorityID: caddy-automatic-https-on-demand

Caddy 2 On-Demand TLS Rate Limiting & ask Endpoint Verification Standard

Production web server standard for multi-tenant SaaS platforms using Caddy 2. Mandates configuring on-demand TLS with an explicit HTTP ask endpoint, rate-limiting certificate requests, and strictly prohibiting open on-demand TLS without domain validation to prevent Let's Encrypt rate-limit DoS attacks.

Prohibited Anti-Pattern: AI enables Caddy on_demand TLS without an `ask` verification endpoint, allowing malicious actors to point thousands of junk domains at the server and exhaust Let's Encrypt issuance quotas.

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Caddy 2 On-Demand TLS Rate Limiting & ask Endpoint Verification Standard - Production web server standard for multi-tenant SaaS platforms using Caddy 2. Mandates configuring on-demand TLS with an explicit HTTP ask endpoint, rate-limiting certificate requests, and strictly prohibiting open on-demand TLS without domain validation to prevent Let's Encrypt rate-limit DoS attacks.
globs: **/Caddyfile, **/caddy.json
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/caddy-automatic-https-on-demand"
---

# Caddy 2 On-Demand TLS Rate Limiting & ask Endpoint Verification Standard

> **Severity**: CRITICAL | **Category**: devops
> **Anti-Pattern Warning**: AI enables Caddy on_demand TLS without an `ask` verification endpoint, allowing malicious actors to point thousands of junk domains at the server and exhaust Let's Encrypt issuance quotas.

## System Constraints
You are a Cloud Edge and Modern Web Server Specialist. When configuring Caddy 2 On-Demand TLS for custom multi-tenant SaaS domains, NEVER enable on_demand_tls without an explicit 'ask' URL endpoint. Without the ask verification guard, attackers can send HTTP requests for thousands of spoofed hostnames, exhausting Let's Encrypt rate limits and causing CA certificate issuance bans.

## Strict Guidelines
- MUST specify on_demand_tls { ask http://internal-backend:8080/api/check-domain } in Caddy global options.
- MUST return HTTP 200 from the ask endpoint ONLY if the requested domain is registered to an active customer.
- MUST return HTTP 400 or 404 from the ask endpoint for all unknown or unverified domains.
- MUST configure rate limits on on-demand certificate issuance: interval 2m, burst 10.
- SHOULD use Caddy internal storage clustering (Redis or DynamoDB) when running multiple edge instances.

## Bad vs Good Implementations
### Hardened Caddyfile with On-Demand TLS and ask Verification

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: An attacker sends requests for 100 random subdomains. Caddy attempts to issue certificates for each, hitting Let's Encrypt's weekly quota and blocking legitimate customer certificates.
```caddyfile
# FATAL: Open On-Demand TLS without ask verification endpoint
{
  on_demand_tls {
    # Missing 'ask' endpoint!
    # Any attacker pointing bad.com to your IP will trigger CA certificate issuance!
  }
}
:443 {
  tls {
    on_demand
  }
  reverse_proxy localhost:3000
}
```

#### Production Standard (Correct)
> **Standard**: Caddy queries the internal backend API before initiating certificate issuance. Only domains that return HTTP 200 are issued certificates, completely mitigating denial-of-service attempts.
```caddyfile
# Hardened Caddyfile for Multi-Tenant SaaS with Domain Verification Guard
{
  on_demand_tls {
    # Caddy asks backend: 'Is this domain an authorized customer?'
    ask http://127.0.0.1:8000/api/internal/verify-domain
    interval 2m
    burst 5
  }
}

:443 {
  tls {
    on_demand
  }
  reverse_proxy localhost:3000
}
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Caddy 2 On-Demand TLS Rate Limiting & ask Endpoint Verification Standard

Caddy 2 On-Demand TLS Rate Limiting & ask Endpoint Verification Standard defines an industrial-grade behavioral standard for devops engineering. Production web server standard for multi-tenant SaaS platforms using Caddy 2. Mandates configuring on-demand TLS with an explicit HTTP ask endpoint, rate-limiting certificate requests, and strictly prohibiting open on-demand TLS without domain validation to prevent Let's Encrypt rate-limit DoS attacks. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: AI enables Caddy on_demand TLS without an `ask` verification endpoint, allowing malicious actors to point thousands of junk domains at the server and exhaust Let's Encrypt issuance quotas. Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftAI enables Caddy on_demand TLS without an `ask` verification endpoint, allowing malicious actors to point thousands of junk domains at the server and exhaust Let's Encrypt issuance quotas.Critical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

MUST specify on_demand_tls { ask http

MUST specify on_demand_tls { ask http://internal-backend:8080/api/check-domain } in Caddy global options.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

MUST return HTTP 200 from the ask endpoint ONLY if the requested domain is registered to an active customer.

MUST return HTTP 200 from the ask endpoint ONLY if the requested domain is registered to an active customer.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

MUST return HTTP 400 or 404 from the ask endpoint for all unknown or unverified domains.

MUST return HTTP 400 or 404 from the ask endpoint for all unknown or unverified domains.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

MUST configure rate limits on on-demand certificate issuance

MUST configure rate limits on on-demand certificate issuance: interval 2m, burst 10.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

SHOULD use Caddy internal storage clustering (Redis or DynamoDB) when running multiple edge instances.

SHOULD use Caddy internal storage clustering (Redis or DynamoDB) when running multiple edge instances.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is Caddy 2 On-Demand TLS Rate Limiting & ask Endpoint Verification Standard critical for AI coding assistants?

Production web server standard for multi-tenant SaaS platforms using Caddy 2. Mandates configuring on-demand TLS with an explicit HTTP ask endpoint, rate-limiting certificate requests, and strictly prohibiting open on-demand TLS without domain validation to prevent Let's Encrypt rate-limit DoS attacks. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (AI enables Caddy on_demand TLS without an `ask` verification endpoint, allowing malicious actors to point thousands of junk domains at the server and exhaust Let's Encrypt issuance quotas.) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

Caddy