Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,075 of 9,075 pages
About the help in other languages
All help pages

Runbook: certificate expiry

What to do when visitors see HTTPS warnings or a certificate is about to expire: check what is served, under Velocity with exp:velocity ssl show and renew, under Apache or nginx with your certificate tool or panel, and…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/hosting/runbooks/certificate-expiry.md

On this page

Runbook: certificate expiry

For on-call staff when visitors see a certificate warning, or monitoring reports a certificate close to expiry.

Contents

  1. See what is served
  2. Under Velocity
  3. Under Apache, nginx or a panel
  4. After the incident

See what is served

From outside, for the domain the customer reported:

openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates
You seeMeaning
notAfter in the pastexpired
an issuer equal to the subject, or a warning about a self-signed certificateunder Velocity: the configured certificate is missing, expired or does not match its key, and Velocity fell back to a self-signed one
a certificate for another namethe wrong virtual host or site answers; check the name-based configuration

Under Velocity

Velocity checks a certificate before using it: "A broken or expired certificate never reaches a visitor: the pair is verified (parses, not expired, key belongs to it) before use, and a self-signed certificate stands in until the real one is usable again" (Velocity HTTPS and certificates).

  1. Show what it serves:

    php bin/php/console exp:velocity ssl show --allow-root-user
  2. Renew:

    php bin/php/console exp:velocity ssl renew --apply www.example.com --allow-root-user

    "The running server picks a renewal up within a minute, no restart" (exp:velocity --help).

  3. With Let's Encrypt, renewal normally needs nothing: certificates "renew in a background job with growing pauses (5 minutes doubling up to a day) after a failure". If it keeps failing, check that port 80 of the server is reachable from the internet and that DNS points to it.

  4. With your own files ([HTTPSSettings] Certificate and Key), put the new pair in place and check again with ssl show.

Under Apache, nginx or a panel

  • Renew with the tool that issued the certificate (certbot or another ACME client, or the panel's certificate feature), then reload the web server.
  • Check that the renewal job runs: its timer or cron entry, its log.
  • See TLS certificates in panels and TLS and HTTPS.

Note

HSTS: Velocity sends Strict-Transport-Security with HSTSMaxAge=300 by default; "a browser that has seen it refuses plain HTTP to this host name ... for that long". Do not try to work around an expired certificate by switching the site to plain HTTP; renew it.

After the incident

  • To do: Verify from outside with openssl s_client again.
  • To do: Add or fix certificate expiry monitoring, with a warning well before the end (Health checks and uptime).
  • To do: Note in the site record which source issues the certificate and where it renews.

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x