---
title: "SSL/TLS for Self-Hosters"
description: "HTTPS for your self-hosted tools. How SSL works, why you need it, and how to set it up with Caddy or Let's Encrypt."
---

# SSL/TLS for Self-Hosters

**SSL/TLS** is what makes the padlock appear in your browser. It encrypts traffic between your users and your server so nobody can snoop on it.

Every self-hosted tool accessible from the internet **must** have HTTPS. No exceptions.

## The Easy Way: Caddy (Automatic)

If you followed our [reverse proxy guide](/concepts/reverse-proxies) and are using Caddy, **you already have SSL**. Caddy obtains and renews Let's Encrypt certificates automatically for every domain in your Caddyfile.

No config needed. No cron jobs. No certbot. It just works.

> 🔥 **Pro Tip:** This is the #1 reason we recommend Caddy over Nginx.

## The Manual Way: Let's Encrypt + Certbot

If you're using raw Nginx, you'll need certbot:

```bash
# Install certbot
apt install certbot python3-certbot-nginx -y

# Obtain a certificate
certbot --nginx -d plausible.yourdomain.com

# Verify auto-renewal
certbot renew --dry-run
```

Certbot will modify your Nginx config automatically and set up a cron job for renewal.

## SSL Checklist

After setting up SSL, verify:

- [ ] Site loads on `https://` (padlock visible)
- [ ] `http://` redirects to `https://` automatically
- [ ] Certificate is from Let's Encrypt (click padlock → "Certificate")
- [ ] No mixed-content warnings in browser console

## Common Gotchas

**"Certificate not found"** → Your DNS hasn't propagated yet. Wait 5–10 minutes and try again.

**"Too many requests"** → Let's Encrypt rate-limits to 50 certificates/week per domain. If you're testing, use `--staging` flag first.

**"Connection refused on port 443"** → Port 443 isn't open in your firewall. Run: `ufw allow 443/tcp`

## Next Steps

→ [Backups That Actually Work](/concepts/backups) — Protect the data you're securing with SSL
