tls.cert.expired

Certificate Expired

What we check

We connect to each MX IP address over STARTTLS and inspect the presented certificate's notAfter field — the date and time after which the certificate authority declares the certificate invalid.

What this finding means

The server's TLS certificate has expired. Every certificate has a fixed validity window (notBefore to notAfter); once notAfter passes, the certificate is no longer considered trustworthy by any standards-compliant verifier.

Why it matters

How to fix

  1. Renew the certificate. If you use Let's Encrypt or another ACME-based CA, the renewal is usually automatic — check that the renewal timer or cron job is still running:

    # Check certbot timer
    systemctl status certbot.timer
    
    # Force a renewal test
    certbot renew --dry-run
    
  2. Reload the mail server after renewal so it picks up the new certificate. Most mail servers (Postfix, Exim, Dovecot) need a reload, not a restart:

    systemctl reload postfix
    
  3. Verify the new certificate:

    openssl s_client -starttls smtp -connect mail.example.com:25 -servername mail.example.com 2>/dev/null | openssl x509 -noout -dates
    
  4. Automate monitoring. Set a calendar alert or use a monitoring tool to catch certificates before they expire — 30 days is a common lead time.

How it's graded

An expired certificate carries a –30 penalty and triggers an instant F grade for the TLS category. See Grading Methodology for the full scoring model.

Evidence example

$ openssl s_client -starttls smtp -connect mail.example.com:25 \
    -servername mail.example.com 2>/dev/null | openssl x509 -noout -dates
notBefore=Jan  5 00:00:00 2025 GMT
notAfter=Apr  5 23:59:59 2025 GMT    ← expired

References