Skip to content

Let's Encrypt for Web Hosting: Certificate, Renewal, Troubleshooting

Christopher Sakel  ·   ·  5 min Reading time

Updates & News · min 5 Reading time · Christopher Sakel

Let's Encrypt for Web Hosting: Certificate, Renewal, Troubleshooting
In short
  • Let's Encrypt certificates are free, valid for 90 days, and renew automatically in the background on our web hosting
  • If renewal fails, it's almost always Port 80, a wrong DNS record, or a reverse proxy intercepting the request
  • For wildcard certificates (*.your-domain.com) you need the DNS-01 challenge instead of HTTP-01

A red padlock icon in the browser has scared off more visitors than any slow page load. It says "Not secure", and anyone who lands on an order page clicks away before typing in their credit card number. Let's Encrypt solved this problem for most of the web by making the certificate free – but "free" doesn't mean "takes care of everything by itself", and that's exactly where the support requests we regularly get come from.

How Let's Encrypt actually works

Let's Encrypt is a certificate authority that uses the ACME protocol to automatically verify that you really do control a domain, and then issues you a Domain Validated (DV) certificate. No commercial register extract, no phone call, no multi-day wait like with classic paid certificates. The check runs via what's called a challenge, and it's precisely the choice of challenge that later decides whether a renewal succeeds or aborts with a cryptic error message.

ChallengeHow it verifiesWhen it makes sense
HTTP-01Places a file under your domain, Let's Encrypt fetches it over Port 80Standard web hosting with a reachable Port 80, one certificate per domain/subdomain
DNS-01You create a TXT record in your domain's DNS, which Let's Encrypt queriesWildcard certificates, servers without an open Port 80, internal systems
TLS-ALPN-01Verification directly over Port 443 via a TLS extensionRare, mostly when Port 80 must stay permanently blocked

How the certificate works on our web hosting

If your domain is connected to your web hosting via the customer area, Plesk handles issuance and renewal itself – you don't need to order a certificate manually. This requires that the domain actually points to our servers; otherwise the HTTP-01 check fails, because Let's Encrypt fetches the response not from us but from your old provider. You'll find how to set the DNS records for this correctly in the post Connecting a domain to web hosting.

  1. Link the domain in the customer area to your web hosting plan and set the DNS record (A record or nameservers)
  2. In the Plesk panel, under "Websites & Domains" → "SSL/TLS Certificates", open "Let's Encrypt"
  3. Select the domain variants (with and without www) and have the certificate issued
  4. Under "Hosting Settings", enable the redirect from HTTP to HTTPS so old traffic doesn't end up on the unencrypted page

On your own root server with web hosting, the same principle applies, except that you're responsible for the ACME client yourself. The most common client is Certbot:

apt install certbot python3-certbot-nginx
certbot --nginx -d deine-domain.de -d www.deine-domain.de

Certbot automatically sets up a cronjob or systemd timer that checks twice a day whether a renewal is due. Renewal doesn't happen right before expiry, but considerably earlier – leaving time to notice a problem before the site actually ends up with an expired certificate.

You can safely test at any time whether automatic renewal would work in principle, without using up a real certificate:
certbot renew --dry-run
If the dry run completes cleanly, the real renewal will too.

When renewal fails

Almost every failed renewal traces back to one of a handful of causes:

  • Port 80 blocked – a firewall rule or a restrictive security plugin doesn't let Let's Encrypt's validation request through at all
  • DNS no longer points to the right server – for example after a provider switch where the old A record was forgotten
  • Reverse proxy or CDN intercepts the request – the file under /.well-known/acme-challenge/ never reaches the actual server
  • Wrong permissions in the webroot – the ACME client can't write the validation file, or the web server can't read it
  • Too many failed attempts in a short time – Let's Encrypt limits how often you can request new certificates for the same domain within a given period, which is exactly why it's worth using staging mode when testing
Anyone who requests a new certificate repeatedly "just to see" while debugging can hit Let's Encrypt's rate limit. Use the staging server for tests (certbot --staging) – it doesn't count against the limit for real certificates.

A typical error message is "Invalid response from ... : 404" – this almost always means the challenge file isn't arriving where Let's Encrypt expects it. First check whether the domain is actually hosted with us, then whether a proxy or a redirect rule is involved that treats paths under /.well-known/ differently from the rest of the site.

Wildcard certificates

For a certificate that covers all subdomains at once (*.deine-domain.de), HTTP-01 isn't enough – Let's Encrypt strictly requires DNS-01 here, because a wildcard can't be validated via a single reachable URL. So you need access to your domain's DNS management and must be able to set a TXT record there, either manually for every renewal or automated via a DNS plugin for your ACME client.

For
  • Free, no recurring certificate cost
  • Fully automatable, no manual renewal needed
  • Broad support in Plesk, Nginx, Apache, all common browsers
Against
  • Domain validation only, no organization vetting like with EV certificates
  • Short 90-day lifetime makes you dependent on working automation
  • Wildcards require DNS-01, and thus API access to DNS management
A certificate nobody renews is just an expiration date with extra steps.

Checking whether it worked

After issuance or renewal, a quick check is enough:

echo | openssl s_client -connect deine-domain.de:443 -servername deine-domain.de 2>/dev/null | openssl x509 -noout -dates

The output shows notBefore and notAfter – if notAfter is roughly 90 days in the future, everything's current. It's also worth a look in the browser itself: click the padlock icon, view the certificate details, the issuer should be "Let's Encrypt" or "R-something" (the current intermediate CA). For GDPR-related background on web hosting in Germany, it's also worth reading our post Web hosting in Germany – secure, flexible, and GDPR-compliant, especially if encryption is part of your compliance requirements.

Frequently asked questions

How long is a Let's Encrypt certificate valid, and do I have to take care of renewal myself?
A Let's Encrypt certificate is valid for 90 days. On our web hosting, renewal runs automatically via Plesk, so you don't have to trigger anything. On a self-managed root server, this is handled by your ACME client's cronjob or timer, provided it's set up correctly.
Why do I get a message that the challenge failed when issuing a certificate?
Usually because Let's Encrypt can't reach the validation file under /.well-known/acme-challenge/. The most common causes: Port 80 is blocked by a firewall, the domain's DNS record still points to the old provider, or a reverse proxy intercepts the path before it reaches the web server.
Can I get a wildcard certificate for all subdomains with Let's Encrypt too?
Yes, but only via the DNS-01 challenge, not HTTP-01. For that you need access to your domain's DNS management to set the required TXT record.
My certificate is valid, but the browser still shows 'not secure' – why?
In most cases it's mixed content: the page itself loads over HTTPS but still pulls in individual images, scripts, or stylesheets over http://. Check the page source or the browser console for the corresponding warnings.
Does the SSL certificate cost extra with your web hosting?
No, Let's Encrypt is issued free of charge and is already included in the web hosting plan.