Skip to content

Commit 9de1440

Browse files
committed
release: public v0.1.9
- add staged OV/business flows and org-id pre-linking - clarify provider-linked renewal lifetimes and validity output - derive default output dirs from certificates-dir and common-name - simplify docs and examples around Linux defaults certbro-public-snapshot: true certbro-private-commit: 3dd4983fceaf556415c96cb57ef1d4ccced59f0e certbro-private-branch: main
1 parent a0ad743 commit 9de1440

36 files changed

Lines changed: 2338 additions & 418 deletions

.gitignore

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1+
*~
12
.DS_Store
23
.gocache/
34
dist/
45
certbro
5-
scripts/publish-public.sh
6-
scripts/release-current.sh
7-
scripts/release-devel.sh
8-
scripts/testdeploy.sh
9-
scripts/new-alias-deploy.sh
106
*.log
117
*.pem
128
*.key

.tmp/certbro-renew.lock

Whitespace-only changes.

CHANGES.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,44 @@
22

33
This file summarizes notable changes from the most recent committed updates.
44

5+
## 2026-03-23
6+
7+
- `certbro issue`, `certbro import`, and `certbro issue-pair` now derive their output directories from `--certificates-dir` plus `common-name` when no explicit output path is passed.
8+
- Removed redundant `--output-dir` and `--output-dir-base` flags from the basic English and German examples, walkthroughs, and quick-start guides.
9+
- Simplified the README, getting-started guides, workflow overview, renewal/import/automation guides, and Ubuntu walkthroughs so the first example commands now rely on the Linux defaults instead of repeating default flags.
10+
- Removed default-valued parameters such as `/etc/certbro` state and certificates paths, the default DV product, and default key or timer settings from basic example commands. Non-default flags remain documented where they actually change behavior.
11+
- Restructured the larger Ubuntu walkthroughs so the initial `issue`, `renew`, `install`, and `list` examples stay flat and copy-pasteable, while non-default product and lifetime overrides are now described as explicit optional follow-up variants.
12+
13+
---
14+
15+
- Aligned the OV/business docs and example walkthroughs with the current TLS API semantics. The guides now describe `certbro issue` as blocking by default for DV products only.
16+
- Documented the `--org-id` path for OV/business orders, so existing usable organizations can be pre-linked before ordering.
17+
- Updated staged OV/business completion fixtures and tests to the current Console completion route under `/my/certs/{certificate_id}/complete`.
18+
19+
---
20+
21+
- Added staged OV/business order support for the TLS API completion flow.
22+
- `certbro issue` now treats `action_required=true` as a successful staged start, stores pending material locally, prints the Console `completion_url`, and exits without blocking for issuance.
23+
- `certbro renew` now resumes staged OV/business orders, keeps action-required orders pending without duplicating them, provisions DCV once validation records appear, and finalizes download and deployment after issuance.
24+
- Extended pending metadata, list output, and regression coverage for staged OV/business orders, including `action_required`, `pending_reason`, `pending_message`, `completion_url`, and `organization_id`.
25+
26+
---
27+
28+
- Aligned renewal handling with the updated TLS API semantics for provider-linked renewals.
29+
- `validity_days` is now treated consistently as the purchased base lifetime, while the effective issued lifetime is derived from `valid_from` and `valid_until`.
30+
- Added issued-lifetime helpers and surfaced `purchased_validity_days`, `effective_validity_days`, and `renewal_bonus_days` in CLI output and deployment metadata.
31+
- Updated docs and tests so `certbro` no longer implies guaranteed renewal credit before issuance.
32+
33+
---
34+
535
## 2026-03-22
636

737
- Added English and German validity-management guides and updated the existing renewal, issuing, quick-start, and Ubuntu example docs to describe the new lifetime rules and short-lifetime examples correctly.
838
- Expanded regression coverage for schedule transitions, renewal timing validation, legacy lead-time normalization, and recent-issuance cooldown behavior.
939
- Added a 48-hour cooldown after fresh issuance. Non-forced renewal runs now skip certificates that were issued less than 48 hours ago.
1040
- Added self-healing for legacy managed certificates with overly large lead times. During renewals, stored lead times are reduced to `validity_days - 1` when needed.
1141
- Added renewal timing validation to prevent immediate renewal or reissue loops. New and updated configurations now require `validity_days` to be greater than both `renew_before_days` and `reissue_lead_days`.
12-
- Added automatic normalization of stored `validity_days` during renewals. If an older managed certificate still stores a now-too-large value, `certbro renew` uses the current schedule-aware default and persists the adjusted value after a successful run.
42+
- Added automatic normalization of stored `validity_days` during renewals. If an older managed certificate still stores a now-too-large value, `certbro renew` uses the current schedule-aware default and persists the adjusted value during renewal processing.
1343
- Moved the schedule-aware CA/B validity handling one day earlier than the official transition dates, so `certbro` starts using the upcoming lower defaults on `2026-03-14`, `2027-03-14`, and `2029-03-14`.
1444

1545
---

README.de.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Das Tool bestellt Zertifikate, legt `dns-cname-token`-Validierungsrecords über
1414
- RSA- und ECDSA-Key-Rotation bei neuen Bestellungen, Renewal-Orders und Reissues
1515
- Stabile Dateien unter `live/` und versionierte Snapshots unter `archive/`
1616
- Eingebaute Validierung und Reload-Unterstützung für `nginx`, `apache` und `caddy`
17-
- Stündliche unbeaufsichtigte Renewals über `systemd`
17+
- Unbeaufsichtigte Renewals über `systemd`
1818

1919
## Voraussetzungen
2020

@@ -41,47 +41,44 @@ curl -fsSL https://install.certbro.com/rf | CERTBRO_VERSION=v0.1.0 sh
4141

4242
## Schnellstart
4343

44-
Standardmäßig nutzt `certbro` `/etc/certbro/state.json` als State-Datei und `/etc/certbro` als Root für verwaltete Zertifikate. Die folgenden Befehle nennen die Pfade der Klarheit halber trotzdem explizit:
44+
Standardmäßig nutzt `certbro` `/etc/certbro/state.json` als State-Datei und `/etc/certbro` als Root für verwaltete Zertifikate. `issue`, `import` und `issue-pair` leiten Zertifikatsverzeichnisse ebenfalls aus diesem Root und dem `common-name` ab. Die folgenden Befehle verwenden diese Defaults. `--state-file`, `--certificates-dir`, `--output-dir` und `--output-dir-base` sind nur nötig, wenn andere Pfade genutzt werden sollen.
4545

4646
```sh
4747
sudo mkdir -p /etc/certbro
4848

49-
sudo certbro --state-file /etc/certbro/state.json configure \
50-
--api-key YOUR_REGFISH_API_KEY
49+
sudo certbro configure --api-key YOUR_REGFISH_API_KEY
5150
```
5251

5352
Zertifikat bestellen und deployen:
5453

5554
```sh
56-
sudo certbro --state-file /etc/certbro/state.json issue \
55+
sudo certbro issue \
5756
--name example-com \
5857
--common-name example.com \
5958
--dns-name www.example.com \
60-
--product RapidSSL \
61-
--webserver nginx \
62-
--key-type ecdsa \
63-
--ecdsa-curve p256 \
64-
--output-dir /etc/certbro/example.com
59+
--webserver nginx
6560
```
6661

62+
Für DV-Produkte wartet `certbro issue` in der Regel auf die Ausstellung und deployt das Zertifikat direkt. Für OV- oder Business-Produkte kann die TLS API stattdessen `action_required=true` mit einer `completion_url` unter `/my/certs/...` zurückgeben. In diesem Fall speichert `certbro` das Pending-Material lokal, gibt die Console-URL aus und endet erfolgreich. Ein späterer Lauf von `certbro renew` setzt denselben offenen Vorgang fort, nachdem der Console-Schritt abgeschlossen wurde.
63+
6764
Renewals manuell ausführen:
6865

6966
```sh
70-
sudo certbro --state-file /etc/certbro/state.json renew
67+
sudo certbro renew
7168
```
7269

7370
Stündlichen Renewal-Timer installieren:
7471

7572
```sh
76-
sudo certbro --state-file /etc/certbro/state.json install \
77-
--certificates-dir /etc/certbro
73+
sudo certbro install
7874
```
7975

8076
## Typische Workflows
8177

8278
- Multi-Domain-Zertifikate: `--dns-name` für jede SAN wiederholen
8379
- Paralleler RSA- und ECDSA-Betrieb: `certbro issue-pair`
8480
- Bereits bestehende regfish-Bestellungen: Import per `certificate_id`
81+
- OV- oder Business-Bestellungen: `certbro issue` kann eine Console-`completion_url` zurückgeben; wenn bereits eine nutzbare `--org-id` bekannt ist, direkt mitgeben, andernfalls die Bestellung dort abschließen und später mit `certbro renew` finalisieren
8582
- Sofortiger Ersatz: `certbro renew --name example-com --force`
8683
- Einmaliger Laufzeit-Override: `certbro renew --name example-com --force --validity-days 30`
8784
- Pending-Ausstellung nach Timeout: `certbro renew --name example-com` erneut ausführen, um denselben Request weiter zu beobachten

README.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ It orders certificates, provisions `dns-cname-token` validation records through
1414
- RSA and ECDSA key rotation on new issues, renewal orders, and reissues
1515
- Stable files under `live/` and versioned snapshots under `archive/`
1616
- Built-in validation and reload support for `nginx`, `apache`, and `caddy`
17-
- Hourly unattended renewals through `systemd`
17+
- Unattended renewals through `systemd`
1818

1919
## Requirements
2020

@@ -41,47 +41,44 @@ curl -fsSL https://install.certbro.com/rf | CERTBRO_VERSION=v0.1.0 sh
4141

4242
## Quick Start
4343

44-
By default, `certbro` uses `/etc/certbro/state.json` as the state file and `/etc/certbro` as the managed certificates root. The commands below keep the paths explicit for clarity:
44+
By default, `certbro` uses `/etc/certbro/state.json` as the state file and `/etc/certbro` as the managed certificates root. `issue`, `import`, and `issue-pair` also derive certificate directories from that root and the `common-name`. The commands below use those defaults. Add `--state-file`, `--certificates-dir`, `--output-dir`, or `--output-dir-base` only when you want different paths.
4545

4646
```sh
4747
sudo mkdir -p /etc/certbro
4848

49-
sudo certbro --state-file /etc/certbro/state.json configure \
50-
--api-key YOUR_REGFISH_API_KEY
49+
sudo certbro configure --api-key YOUR_REGFISH_API_KEY
5150
```
5251

5352
Issue and deploy a certificate:
5453

5554
```sh
56-
sudo certbro --state-file /etc/certbro/state.json issue \
55+
sudo certbro issue \
5756
--name example-com \
5857
--common-name example.com \
5958
--dns-name www.example.com \
60-
--product RapidSSL \
61-
--webserver nginx \
62-
--key-type ecdsa \
63-
--ecdsa-curve p256 \
64-
--output-dir /etc/certbro/example.com
59+
--webserver nginx
6560
```
6661

62+
For DV products, `certbro issue` usually waits for issuance and deploys the certificate directly. For OV or business products, the TLS API can instead return `action_required=true` with a `completion_url` under `/my/certs/...`. In that case, `certbro` stores the pending material locally, prints the Console URL, and exits successfully. A later `certbro renew` run resumes the same pending order after the Console step has been completed.
63+
6764
Run renewals manually:
6865

6966
```sh
70-
sudo certbro --state-file /etc/certbro/state.json renew
67+
sudo certbro renew
7168
```
7269

7370
Install the hourly renewal timer:
7471

7572
```sh
76-
sudo certbro --state-file /etc/certbro/state.json install \
77-
--certificates-dir /etc/certbro
73+
sudo certbro install
7874
```
7975

8076
## Common Workflows
8177

8278
- Multi-domain certificates: repeat `--dns-name` for each SAN
8379
- Dual RSA and ECDSA deployment: use `certbro issue-pair`
8480
- Existing regfish orders: import by `certificate_id`
81+
- OV or business orders: `certbro issue` can return a Console `completion_url`; if you already know a usable `--org-id`, pass it up front, otherwise complete the order there and let `certbro renew` finish it later
8582
- Immediate replacement: `certbro renew --name example-com --force`
8683
- One-off renewal lifetime override: `certbro renew --name example-com --force --validity-days 30`
8784
- Pending issuance after a timeout: rerun `certbro renew --name example-com` to resume monitoring the existing request

docs/de/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Dieses Verzeichnis enthält die deutschsprachigen Betriebs- und Nutzungshinweise
1111

1212
## Zertifikats-Workflows
1313

14+
- [Workflow-Überblick](workflow-overview.md): DV-, gestufte OV-/Business- und vorverknüpfte Organisations-Flows im direkten Vergleich
1415
- [Zertifikate bestellen](issuing-certificates.md): Single-Domain, SANs, Produktauswahl, Key-Algorithmen, Laufzeitplan und leise Ausgabe
1516
- [Laufzeitverwaltung](validity-management.md): gespeicherte Laufzeiten manuell ändern und automatisch an künftige Limits anpassen
1617
- [Parallele RSA- und ECDSA-Zertifikate](dual-certificates.md): gleichzeitiger Betrieb für moderne und ältere TLS-Clients

docs/de/dual-certificates.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ Auch die Verzeichnisse werden daraus konsistent abgeleitet:
2121
- `<output-dir-base>-rsa`
2222
- `<output-dir-base>-ecdsa`
2323

24+
Wenn `--output-dir-base` fehlt, nutzt `certbro issue-pair` zunächst `<certificates-dir>/<common-name>` und hängt danach diese Suffixe an.
25+
2426
Beispiel:
2527

2628
```sh
27-
sudo certbro --state-file /etc/certbro/state.json issue-pair \
29+
sudo certbro issue-pair \
2830
--name-base example-com \
2931
--common-name example.com \
3032
--dns-name www.example.com \
31-
--product RapidSSL \
32-
--output-dir-base /etc/certbro/example.com \
3333
--webserver nginx \
3434
--webserver-config /etc/nginx/nginx.conf
3535
```
@@ -60,16 +60,17 @@ Mit dieser Konfiguration handeln TLS-Clients automatisch das jeweils passende Ze
6060
Beide Zertifikate bleiben eigenständige Renewal-Einheiten. Sie können:
6161

6262
- gemeinsam über `certbro renew`
63-
- gemeinsam über `certbro --certificates-dir /etc/certbro renew`
6463
- einzeln über `certbro renew --name example-com-rsa` und `certbro renew --name example-com-ecdsa`
6564

6665
erneuert werden.
6766

67+
Wenn das Paar unter einem nicht-defaultigen Root liegt, einfach zusätzlich `--certificates-dir /pfad/zu/certbro` setzen.
68+
6869
Beispiel:
6970

7071
```sh
71-
sudo certbro --state-file /etc/certbro/state.json renew --name example-com-rsa
72-
sudo certbro --state-file /etc/certbro/state.json renew --name example-com-ecdsa
72+
sudo certbro renew --name example-com-rsa
73+
sudo certbro renew --name example-com-ecdsa
7374
```
7475

7576
Wenn beide Zertifikate mit `--webserver nginx` konfiguriert sind, validiert und reloadet jeder erfolgreiche Renewal-Lauf `nginx` nach dem Deployment.

docs/de/examples/ubuntu-apache-certbro.md

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,8 @@ Diese Kommandos zuerst ausführen und die Werte anpassen:
3333
export REGFISH_API_KEY='YOUR_REGFISH_API_KEY'
3434
export HOST_FQDN='example.certbro.com'
3535
export CERTBRO_NAME='example-certbro-com'
36-
export CERTBRO_PRODUCT='RapidSSL'
37-
export CERTBRO_VALIDITY_DAYS='3'
38-
export CERTBRO_RENEW_BEFORE_DAYS='2'
39-
export CERTBRO_REISSUE_LEAD_DAYS='2'
4036
export WEBROOT="/var/www/${HOST_FQDN}/html"
4137
export CERTBRO_DIR="/etc/certbro/${HOST_FQDN}"
42-
export CERTBRO_STATE_FILE='/etc/certbro/state.json'
4338
```
4439

4540
## 2. Ubuntu aktualisieren, Apache installieren und Firewall aktivieren
@@ -210,32 +205,28 @@ Dadurch wird der verifizierte API-Key im lokalen certbro-State gespeichert:
210205
```sh
211206
sudo mkdir -p /etc/certbro
212207

213-
sudo certbro --state-file "${CERTBRO_STATE_FILE}" configure \
214-
--api-key "${REGFISH_API_KEY}"
208+
sudo certbro configure --api-key "${REGFISH_API_KEY}"
215209
```
216210

217211
## 7. Zertifikat bestellen
218212

219-
Zertifikatsverzeichnis anlegen und Zertifikat bestellen:
213+
Zertifikat bestellen. Mit den Linux-Defaults schreibt `certbro` nach `${CERTBRO_DIR}`:
220214

221215
```sh
222-
sudo certbro --state-file "${CERTBRO_STATE_FILE}" issue \
216+
sudo certbro issue \
223217
--name "${CERTBRO_NAME}" \
224218
--common-name "${HOST_FQDN}" \
225-
--product "${CERTBRO_PRODUCT}" \
226-
--validity-days "${CERTBRO_VALIDITY_DAYS}" \
227-
--renew-before-days "${CERTBRO_RENEW_BEFORE_DAYS}" \
228-
--reissue-lead-days "${CERTBRO_REISSUE_LEAD_DAYS}" \
229-
--webserver apache \
230-
--output-dir "${CERTBRO_DIR}"
219+
--webserver apache
231220
```
232221

222+
Der Befehl oben nutzt das Default-DV-Produkt und die schedule-aware Default-Laufzeit. Wenn ein anderes Produkt oder eine kürzere Testlaufzeit gewünscht ist, einfach gezielt nicht-defaultige Flags wie `--product SecureSite` oder `--validity-days 30` ergänzen.
223+
233224
Was während `certbro issue` passiert:
234225

235226
- `certbro` erzeugt lokal einen frischen Private Key und CSR
236227
- es legt die TLS-Bestellung über die regfish TLS API an
237228
- es provisioniert automatisch die benötigten `dns-cname-token`-DCV-Records über die regfish DNS API
238-
- es wartet auf die Ausstellung
229+
- in diesem DV-Beispiel wartet es auf die Ausstellung
239230
- es lädt das Zertifikat herunter und deployt es auf stabile Pfade unter `${CERTBRO_DIR}/live/`
240231
- weil `--webserver apache` gesetzt ist, validiert es die Apache-Konfiguration und reloadet Apache nach dem Deployment
241232

@@ -292,7 +283,7 @@ curl -I "https://${HOST_FQDN}"
292283
`systemd`-Service und Timer installieren:
293284

294285
```sh
295-
sudo certbro --state-file "${CERTBRO_STATE_FILE}" install --certificates-dir /etc/certbro
286+
sudo certbro install
296287
```
297288

298289
Timer prüfen:
@@ -307,25 +298,25 @@ sudo systemctl list-timers certbro.timer --all
307298
Verwalteten Zertifikatszustand anzeigen:
308299

309300
```sh
310-
sudo certbro --state-file "${CERTBRO_STATE_FILE}" list
301+
sudo certbro list
311302
```
312303

313304
Regulären Renewal-Lauf starten:
314305

315306
```sh
316-
sudo certbro --state-file "${CERTBRO_STATE_FILE}" renew --name "${CERTBRO_NAME}"
307+
sudo certbro renew --name "${CERTBRO_NAME}"
317308
```
318309

319310
Wenn der komplette Renewal-Pfad sofort getestet werden soll, kann er erzwungen werden:
320311

321312
```sh
322-
sudo certbro --state-file "${CERTBRO_STATE_FILE}" renew \
313+
sudo certbro renew \
323314
--name "${CERTBRO_NAME}" \
324315
--force \
325-
--validity-days "${CERTBRO_VALIDITY_DAYS}"
316+
--validity-days 30
326317
```
327318

328-
Das `3`-Tage-Beispiel funktioniert nur, weil die gespeicherten Lead-Tage auf `2` gesetzt wurden. `certbro` lehnt Laufzeiten ab, die nicht größer sind als die Renewal-Lead-Tage.
319+
Wenn sehr kurze Laufzeiten getestet werden sollen, müssen `--renew-before-days` und `--reissue-lead-days` unter der gekauften Basislaufzeit bleiben. Werte, die sofort wieder in das Renewal- oder Reissue-Fenster führen würden, lehnt `certbro` ab.
329320

330321
`--force` nur verwenden, wenn bewusst ein echter Renewal- oder Reissue-Flow für Tests ausgelöst werden soll.
331322

0 commit comments

Comments
 (0)