v2.31.1 f37fe67

tls.md RawHistoryFolder

TLS Commands

Inspect public TLS/ACME certificate status.

Gordon serves normal HTTPS fallback on TLS-capable entrypoints such as entrypoints.edge with protocol = "smart_tcp". Certificate priority is static certificates first, then public ACME certificates, then Gordon's internal CA.

ACME challenge notes:

  • DNS-01 (cloudflare-dns-01) does not require a special external port 80 edge.
  • HTTP-01 requires an HTTP-capable smart TCP entrypoint reachable on external port 80 for every hostname being validated.
  • TLS-ALPN-01 is not supported.

Remote targeting uses client config or an active remote by default. Use --remote and --token to override. See CLI Overview.

gordon tls

Subcommands

Subcommand Description
status Show public TLS certificate status

gordon tls status

Display the current public TLS/ACME certificate status, including ACME mode, certificate details, route coverage, and any errors.

gordon tls status
gordon tls status --json
gordon tls status --remote https://gordon.mydomain.com --token $TOKEN

Flags

Flag Description
--json Output as JSON

Human Output

Public TLS / ACME Status

ACME: enabled
Configured Mode: auto
Effective Mode: http-01
Reason: configured
Token Source: env

Certificates
  ID: cert-abc123
  Names: example.com, www.example.com
  Status: valid
  Not After: 2026-05-29 12:00:00

Route Coverage
  example.com  covered=yes  covered_by=cert-abc123
  internal.local  covered=no  error=self-signed cert

Errors
  route internal.local has no ACME cert

JSON Output

{
  "acme_enabled": true,
  "configured_mode": "auto",
  "effective_mode": "http-01",
  "selection_reason": "configured",
  "token_source": "env",
  "certificates": [
    {
      "id": "cert-abc123",
      "names": ["example.com", "www.example.com"],
      "challenge": "http-01",
      "status": "valid",
      "not_after": "2026-05-29T12:00:00Z",
      "renewal_pending": false
    }
  ],
  "routes": [
    {
      "domain": "example.com",
      "covered": true,
      "covered_by": "cert-abc123",
      "required_acme": true
    },
    {
      "domain": "internal.local",
      "covered": false,
      "required_acme": false,
      "error": "self-signed cert"
    }
  ],
  "errors": ["route internal.local has no ACME cert"]
}

Token Source

The token_source field indicates where the ACME token was sourced from (e.g., env, file, config). The token value is never displayed.

source
1# TLS Commands
2
3Inspect public TLS/ACME certificate status.
4
5Gordon serves normal HTTPS fallback on TLS-capable entrypoints such as `entrypoints.edge` with `protocol = "smart_tcp"`. Certificate priority is static certificates first, then public ACME certificates, then Gordon's internal CA.
6
7ACME challenge notes:
8
9- DNS-01 (`cloudflare-dns-01`) does not require a special external port 80 edge.
10- HTTP-01 requires an HTTP-capable smart TCP entrypoint reachable on external port 80 for every hostname being validated.
11- TLS-ALPN-01 is not supported.
12
13Remote targeting uses client config or an active remote by default.
14Use `--remote` and `--token` to override. See [CLI Overview](./index.md).
15
16## gordon tls
17
18### Subcommands
19
20| Subcommand | Description |
21|------------|-------------|
22| `status` | Show public TLS certificate status |
23
24---
25
26## gordon tls status
27
28Display the current public TLS/ACME certificate status, including ACME mode,
29certificate details, route coverage, and any errors.
30
31```bash
32gordon tls status
33gordon tls status --json
34gordon tls status --remote https://gordon.mydomain.com --token $TOKEN
35```
36
37### Flags
38
39| Flag | Description |
40|------|-------------|
41| `--json` | Output as JSON |
42
43### Human Output
44
45```text
46Public TLS / ACME Status
47
48ACME: enabled
49Configured Mode: auto
50Effective Mode: http-01
51Reason: configured
52Token Source: env
53
54Certificates
55  ID: cert-abc123
56  Names: example.com, www.example.com
57  Status: valid
58  Not After: 2026-05-29 12:00:00
59
60Route Coverage
61  example.com  covered=yes  covered_by=cert-abc123
62  internal.local  covered=no  error=self-signed cert
63
64Errors
65  route internal.local has no ACME cert
66```
67
68### JSON Output
69
70```json
71{
72  "acme_enabled": true,
73  "configured_mode": "auto",
74  "effective_mode": "http-01",
75  "selection_reason": "configured",
76  "token_source": "env",
77  "certificates": [
78    {
79      "id": "cert-abc123",
80      "names": ["example.com", "www.example.com"],
81      "challenge": "http-01",
82      "status": "valid",
83      "not_after": "2026-05-29T12:00:00Z",
84      "renewal_pending": false
85    }
86  ],
87  "routes": [
88    {
89      "domain": "example.com",
90      "covered": true,
91      "covered_by": "cert-abc123",
92      "required_acme": true
93    },
94    {
95      "domain": "internal.local",
96      "covered": false,
97      "required_acme": false,
98      "error": "self-signed cert"
99    }
100  ],
101  "errors": ["route internal.local has no ACME cert"]
102}
103```
104
105### Token Source
106
107The `token_source` field indicates where the ACME token was sourced from
108(e.g., `env`, `file`, `config`). The token value is never displayed.
109
110## Related
111
112- [CLI Overview](./index.md)
113- [Status Command](./status.md)
114- [Routes Command](./routes.md)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close