Blog

Web Security articles

Let's Encrypt: Free SSL Certificates Explained

How Let's Encrypt issues free SSL certificates, how ACME challenges and auto-renewal work, and when a paid certificate still makes sense.

4 min read Web Security

Not long ago, putting a website on HTTPS meant buying a certificate, generating a signing request by hand, and remembering to renew every year. Let's Encrypt changed that. It is a free, automated certificate authority run by the nonprofit Internet Security Research Group (ISRG), and its certificates are trusted by all major browsers and operating systems. For most websites, it is now the default choice.

What Let's Encrypt gives you (and what it does not)

Let's Encrypt issues Domain Validated (DV) certificates. They prove that you control a domain and enable exactly the same TLS encryption as a paid certificate. You can get:

  • Single-name and multi-name certificates (one certificate covering several hostnames).
  • Wildcard certificates such as *.example.com, if you can prove control through DNS.

What it does not offer:

  • Organization Validated (OV) or Extended Validation (EV) certificates, which include your company's verified legal name.
  • Long lifetimes. Certificates are valid for 90 days, and Let's Encrypt has announced plans to shorten that further. This is intentional: short lifetimes limit damage from a compromised key and push everyone towards automation.
  • A warranty or phone support. Help comes from documentation and a community forum.

How it works: the ACME protocol

Let's Encrypt is built around ACME (Automatic Certificate Management Environment), an open protocol published as RFC 8555. Software on your server, called an ACME client, talks to Let's Encrypt and handles everything: creating a key, proving domain control, downloading the certificate, and renewing it later.

Domain control is proven through a challenge. The three main types are:

ChallengeHow you prove controlBest for
HTTP-01Serve a token file at http://yourdomain/.well-known/acme-challenge/ on port 80Ordinary web servers reachable from the internet
DNS-01Create a TXT record at _acme-challenge.yourdomainWildcards, internal servers, servers without port 80 open
TLS-ALPN-01Answer a special TLS handshake on port 443Specialized setups and some reverse proxies

Wildcard certificates can only be issued with DNS-01. If you automate DNS-01, your ACME client needs API access to your DNS provider, so store those credentials carefully.

Getting a certificate with Certbot

Certbot, maintained by the Electronic Frontier Foundation, is the most widely documented ACME client. On a typical Ubuntu server running Nginx, the process looks like this (installation methods vary by distribution; the Certbot website gives exact instructions for yours):

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot proves control with HTTP-01, obtains the certificate, edits your Nginx configuration to use it, and can add an HTTP-to-HTTPS redirect. Files are stored under /etc/letsencrypt/live/example.com/; your server should use fullchain.pem and privkey.pem.

Before you run it, make sure the domain's A (and AAAA, if any) records point to this server. A quick DNS lookup saves a failed validation.

Other popular clients include acme.sh (a lightweight shell script), win-acme for Windows and IIS, and the automatic HTTPS built into web servers such as Caddy. Many hosting control panels also integrate Let's Encrypt with a single checkbox.

Renewal: the part that matters most

A 90-day certificate is only convenient if renewal is automatic. Certbot installs a systemd timer or cron job that runs twice a day and renews any certificate within 30 days of expiry. You can confirm it works without actually renewing:

sudo certbot renew --dry-run

Renewal tends to break for predictable reasons:

  • A firewall rule or security group change blocked inbound port 80, so HTTP-01 fails.
  • The domain's DNS was moved to a different provider, breaking DNS-01 API credentials.
  • A new redirect or CDN rule intercepts /.well-known/acme-challenge/.
  • The web server was not reloaded after renewal, so it keeps serving the old certificate. Certbot's --deploy-hook option can reload it automatically.

Let's Encrypt no longer sends expiry reminder emails, so do not rely on your inbox. Monitor expiry independently, either with your existing monitoring system or by checking periodically with an SSL checker.

Rate limits

To protect the service, Let's Encrypt applies rate limits, such as caps on how many certificates can be issued for the same registered domain within a week and on repeated failed validations. Normal use never comes close. You are most likely to hit them while testing a broken setup repeatedly. Use the staging environment (certbot --staging or --dry-run) while experimenting; it has much higher limits and issues untrusted test certificates.

Behind a CDN or load balancer

If your site sits behind a CDN or cloud load balancer, visitors see the certificate held there, not the one on your server. Many such services issue and renew certificates for you automatically, often from Let's Encrypt or a similar ACME-based CA. In that case you may still want a certificate on the origin server so the connection between the CDN and your server is encrypted too. Make sure HTTP-01 challenge requests can pass through to whichever system is requesting the certificate, or use DNS-01 to avoid the question entirely.

When a paid certificate still makes sense

  • A contract, tender or regulator requires OV or EV validation.
  • You run systems that cannot be automated, such as some legacy appliances, where a longer-lived certificate from a commercial CA is easier to manage. Bear in mind that maximum lifetimes for all public certificates are also shrinking.
  • You want vendor support, a warranty, or certificate management tooling bundled with the purchase.

Key takeaways

  • Let's Encrypt provides free, browser-trusted DV certificates, including wildcards via DNS-01.
  • Everything runs over the ACME protocol, so issuance and renewal can be fully automated.
  • Use fullchain.pem, test with certbot renew --dry-run, and reload the web server after renewal.
  • Monitor expiry yourself; automation fails quietly when firewalls or DNS change.

Need help with this?

Netifi helps businesses around the world with Web Security. Tell us what you are working on.