Skip to main content

SSL Certificates

SSL certificates encrypt traffic between users and your ClawBook dashboard. This guide covers certificate options and management.

Certificate Options

OptionCostEffortBest For
Let's EncryptFreeLowMost users
Self-SignedFreeLowTesting only
Commercial CA$10-100/yrMediumEnterprise
CloudflareFreeLowUsing Cloudflare

Free, automated SSL certificates that renew automatically.

Prerequisites

  • Custom domain configured
  • Port 80 accessible (for verification)
  • DNS pointing to your VPS

Quick Setup

clawbook-ssl setup yourdomain.com

This command:

  1. Verifies domain ownership via HTTP challenge
  2. Obtains certificate from Let's Encrypt
  3. Configures Caddy for HTTPS
  4. Sets up auto-renewal

Manual Setup

If the quick command fails:

# Install certbot
apt install certbot -y

# Obtain certificate
certbot certonly --standalone -d yourdomain.com

# Configure Caddy
nano /etc/caddy/Caddyfile

Caddyfile configuration:

yourdomain.com {
tls /etc/letsencrypt/live/yourdomain.com/fullchain.pem /etc/letsencrypt/live/yourdomain.com/privkey.pem
reverse_proxy localhost:8443
}

Restart Caddy:

systemctl restart caddy

Auto-Renewal

Let's Encrypt certificates expire after 90 days. Auto-renewal is configured:

# Check renewal timer
systemctl status certbot.timer

# Test renewal
certbot renew --dry-run

Wildcard Certificates

For multiple subdomains (*.yourdomain.com):

certbot certonly --manual --preferred-challenges dns \
-d "*.yourdomain.com" -d "yourdomain.com"

You'll need to add DNS TXT records for verification.

Self-Signed Certificates

Only for testing or internal use. Browsers will show warnings.

Generate Self-Signed Certificate

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/clawbook.key \
-out /etc/ssl/certs/clawbook.crt \
-subj "/CN=localhost"

Configure

# /etc/openclaw/config.yaml
server:
ssl:
enabled: true
certificate: /etc/ssl/certs/clawbook.crt
key: /etc/ssl/private/clawbook.key

Commercial Certificates

For enterprise requirements or extended validation.

Generating CSR

openssl req -new -newkey rsa:2048 -nodes \
-keyout domain.key \
-out domain.csr

Fill in details when prompted:

  • Country Name (2 letter code): US
  • State: California
  • Locality: San Francisco
  • Organization: Your Company
  • Common Name: yourdomain.com

Installing Certificate

After receiving certificate from CA:

# Combine certificate and chain
cat domain.crt intermediate.crt > fullchain.crt

# Install
clawbook-ssl import \
--cert /path/to/fullchain.crt \
--key /path/to/domain.key \
--domain yourdomain.com

Certificate Management

Viewing Certificate Info

clawbook-ssl status

# Output:
# Domain: yourdomain.com
# Issuer: Let's Encrypt
# Valid From: 2026-01-30
# Valid Until: 2026-04-30
# Auto-Renew: Enabled
# Days Remaining: 90

Testing Certificate

# Local test
clawbook-ssl test yourdomain.com

# Or use openssl
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

Online Testing

TLS Configuration

Security Settings

# /etc/openclaw/config.yaml
server:
ssl:
min_version: TLS1.2
ciphers:
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
prefer_server_ciphers: true
hsts: true
hsts_max_age: 31536000

HSTS (HTTP Strict Transport Security)

Force HTTPS for all connections:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Enabled by default in ClawBook.

Troubleshooting

Certificate Not Trusted

Causes:

  • Self-signed certificate
  • Incomplete certificate chain
  • Expired certificate

Fix:

# Check certificate chain
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt fullchain.crt

# Rebuild chain
cat domain.crt intermediate.crt root.crt > fullchain.crt

Let's Encrypt Rate Limits

Limits:

  • 50 certificates per domain per week
  • 5 duplicate certificates per week
  • 300 pending authorizations per account

If rate limited, wait or use staging:

certbot certonly --staging -d yourdomain.com

Port 80 Blocked

Let's Encrypt HTTP verification requires port 80:

# Check if port 80 is open
ufw status
ufw allow 80/tcp

# Or use DNS verification instead
certbot certonly --manual --preferred-challenges dns -d yourdomain.com

Auto-Renewal Failed

Check logs:

cat /var/log/letsencrypt/letsencrypt.log

Force renewal:

certbot renew --force-renewal
systemctl restart caddy

Certificate Chain Issues

# Download intermediate certificates
wget https://letsencrypt.org/certs/lets-encrypt-r3.pem

# Test full chain
openssl s_client -connect yourdomain.com:443 -showcerts

Certificate Monitoring

Expiration Alerts

Set up alerts before expiration:

# /etc/openclaw/config.yaml
monitoring:
ssl:
check_interval: daily
alert_days_before: [30, 14, 7, 1]
alert_email: admin@yourdomain.com

External Monitoring

Best Practices

  1. Use Let's Encrypt - Free, automated, trusted
  2. Enable auto-renewal - Never expire unexpectedly
  3. Monitor expiration - Set up alerts
  4. Use strong TLS - TLS 1.2 minimum
  5. Enable HSTS - Force HTTPS always
  6. Test regularly - Use SSL Labs quarterly

Next Steps