{% extends "operator/base.html" %} {% load i18n %} {% block op_title %}{% translate "Certificate & DNS" %}{% endblock %} {% block op_content %}
{% blocktranslate trimmed with domain=zone.domain %}Two certificates per customer, each with its own key: the wildcard
*.<customer>.{{ domain }} for its gateways and one only for its portal
<customer>.{{ domain }}, which never leaves the server.{% endblocktranslate %}
| {% translate "Customer" %} | {% translate "Wildcard (gateways)" %} | {% translate "Gateways" %} | {% translate "Portal" %} | |
|---|---|---|---|---|
| {{ r.org.name }} *.{{ r.org.domain }} |
{% if r.cert %}{% blocktranslate trimmed with version=r.cert.version date=r.cert.not_after|date:"SHORT_DATE_FORMAT" %}v{{ version }}, until {{ date }}{% endblocktranslate %}{% else %}{% translate "none" context "certificate" %}{% endif %} | {{ r.n_gateways }}{% if r.n_outdated %} · {{ r.n_outdated }} {% translate "outdated" %}{% endif %} | {% if r.portal_not_after %}{% blocktranslate trimmed with date=r.portal_not_after|date:"SHORT_DATE_FORMAT" %}until {{ date }}{% endblocktranslate %}{% else %}{% translate "none" context "certificate" %}{% endif %} | |
| {% translate "No customers yet." %} | ||||
{{ log_path }}{% blocktranslate trimmed %}Issuing runs in the background via DNS-01 (a good minute per certificate). The deploy hook imports the wildcard, the version increases, the gateways follow at their next heartbeat; the portal certificate takes effect without an nginx reload.{% endblocktranslate %}
{% blocktranslate trimmed with domain=zone.domain %}No Hetzner token (FORGEIEC_RIVET_HCLOUD_TOKEN in portal.env). Set the records by hand:
*.{{ domain }} and per customer *.<customer>.{{ domain }} A/AAAA
→ fixed IP of the server, CAA 0 issue "letsencrypt.org".{% endblocktranslate %}
| {% blocktranslate trimmed with zone=dns_zone %}Name ({{ zone }}){% endblocktranslate %} | {% translate "Type" context "dns" %} | {% translate "Target" context "dns" %} | {% translate "Actual" context "dns" %} | {% translate "State" %} |
|---|---|---|---|---|
| {{ r.name }} | {{ r.type }} | {{ r.want|join:", " }} | {{ r.have|join:", "|default:"–" }} | {% if r.state == "ok" %}ok{% else %}{{ r.state }}{% endif %} |
{% blocktranslate trimmed %}Syncs the DNS of all organisations with the database. Only records with the Rivet label of this operator are touched; other records remain unchanged.{% endblocktranslate %}
{% endif %} {% if sync_lines is not None %}{% for line in sync_lines %}{{ line }}
{% endfor %}{% else %}{% translate "Everything matches, nothing to do." %}
{% endif %} {% endif %}| {% translate "Wildcard" %} | {% translate "Version" %} | {% translate "valid until" %} | {% translate "Status" %} | {% translate "Fingerprint (SHA-256)" %} |
|---|---|---|---|---|
| {% if c.organisation %}*.{{ c.organisation.domain }}{% else %}*.{{ zone.domain }} {% translate "(earlier)" %}{% endif %} | {{ c.version }} | {{ c.not_after|date:"SHORT_DATE_FORMAT" }} | {% if c.revoked %}{% translate "revoked" %}{% else %}{% translate "valid" %}{% endif %} | {{ c.fingerprint_sha256|truncatechars:24 }} |
| {% translate "No certificate imported yet." %} | ||||
| {% translate "Time" %} | {% translate "Gateway" %} | {% translate "Version" %} | {% translate "delivered" %} |
|---|---|---|---|
| {{ f.fetched_at|date:"SHORT_DATETIME_FORMAT" }} | {{ f.gateway.slug }} | {{ f.cert_version|default:"–" }} | {% if f.delivered %}{% translate "yes" %}{% else %}{% translate "no" %}{% if f.note %} ({{ f.note }}){% endif %}{% endif %} |
| {% translate "No fetches." %} | |||