TLS Configuration
This guide explains all TLS configuration options in ReadyStackGo - from self-signed certificates through custom certificates to Let’s Encrypt and reverse proxy scenarios.
Overview
Section titled “Overview”ReadyStackGo supports various TLS/HTTPS configurations:
| Option | Use Case | Complexity |
|---|---|---|
| Self-Signed | Development, testing, internal network | No configuration needed |
| Custom Certificate | Corporate CA, purchased certificates | File upload |
| Let’s Encrypt | Production environments with public domain | Domain validation |
| Reverse Proxy | Behind nginx, Traefik, HAProxy, etc. | Proxy-dependent |
All settings are located under Settings → TLS / Certificates in the Web UI.
Self-Signed Certificate
Section titled “Self-Signed Certificate”What is a self-signed certificate?
Section titled “What is a self-signed certificate?”A self-signed certificate is automatically generated by ReadyStackGo on first start. It encrypts the connection but is not signed by a trusted Certificate Authority (CA). Browsers will therefore show a security warning.
When to use?
Section titled “When to use?”- Local development - Encryption without CA setup
- Internal test systems - When security warnings are acceptable
- Docker development - Quick start without certificate configuration
How it works
Section titled “How it works”- On first start, ReadyStackGo checks if a certificate exists
- If not, a self-signed certificate is automatically generated
- The certificate is stored at
/app/config/tls/selfsigned.pfx - Validity: 365 days
Reset to self-signed certificate
Section titled “Reset to self-signed certificate”If you’ve uploaded a custom certificate and want to switch back to self-signed:
- Navigate to Settings → TLS / Certificates
- Click Configure Certificate
- Select Reset to Self-Signed
- Confirm the action
- Restart ReadyStackGo to load the new certificate
Custom Certificate
Section titled “Custom Certificate”When to use?
Section titled “When to use?”- Corporate CA - Internal Certificate Authority
- Purchased certificates - From a public CA (DigiCert, Comodo, etc.)
- Wildcard certificates - One certificate for multiple subdomains
Supported formats
Section titled “Supported formats”ReadyStackGo accepts two certificate formats:
| Format | Files | Typical Source |
|---|---|---|
| PFX/PKCS#12 | Single .pfx/.p12 file with password | Windows export, IIS |
| PEM | Separate certificate and key files | Linux, OpenSSL, Let’s Encrypt |
Step-by-step: Upload PFX certificate
Section titled “Step-by-step: Upload PFX certificate”- Navigate to Settings → TLS / Certificates
- Click Configure Certificate
- Select Upload PFX Certificate
- Choose the .pfx file
- Enter the password (if any)
- Click Upload
- Restart ReadyStackGo
Step-by-step: Upload PEM certificate
Section titled “Step-by-step: Upload PEM certificate”- Navigate to Settings → TLS / Certificates
- Click Configure Certificate
- Select Upload PEM Certificate
- Paste the certificate file content (starts with
-----BEGIN CERTIFICATE-----) - Paste the key file content (starts with
-----BEGIN PRIVATE KEY-----or-----BEGIN RSA PRIVATE KEY-----) - Click Upload
- Restart ReadyStackGo
Create certificate with OpenSSL
Section titled “Create certificate with OpenSSL”If you need a self-signed certificate with longer validity or specific settings:
# Generate key and certificate (10 years validity)openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650 -nodes \ -subj "/CN=readystackgo.local"
# Convert to PFX (optional)openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in cert.pemLet’s Encrypt
Section titled “Let’s Encrypt”What is Let’s Encrypt?
Section titled “What is Let’s Encrypt?”Let’s Encrypt is a free, automated Certificate Authority. The certificates are trusted by all major browsers and valid for 90 days. ReadyStackGo renews them automatically.
Prerequisites
Section titled “Prerequisites”- Publicly reachable domain - Let’s Encrypt must be able to validate your domain
- DNS record - The domain must point to your server
- Port 80 or DNS access - Depending on challenge type
Challenge types
Section titled “Challenge types”Let’s Encrypt uses challenges to verify that you control the domain:
| Challenge | Requirement | Advantages |
|---|---|---|
| HTTP-01 | Port 80 reachable | Simplest setup |
| DNS-01 | DNS access | Wildcard support, no port 80 needed |
Step-by-step: HTTP-01 Challenge
Section titled “Step-by-step: HTTP-01 Challenge”This method is easiest when ReadyStackGo is directly reachable from the internet.
Prerequisite: Port 80 must point to your server (not just port 443).
- Navigate to Settings → TLS / Certificates
- Click Configure Certificate
- Select Let’s Encrypt
- Enter the following data:
- Domains: Your domain(s), e.g.,
rsgo.example.com - Email: For expiration notifications
- Challenge Type: HTTP-01
- Domains: Your domain(s), e.g.,
- Optional: Enable Use Staging for testing (no real certificates)
- Click Request Certificate
- Wait for validation (seconds to minutes)
- Restart ReadyStackGo
Step-by-step: DNS-01 Challenge (Manual)
Section titled “Step-by-step: DNS-01 Challenge (Manual)”This method requires manual creation of DNS records but also works for wildcard domains.
- Navigate to Settings → TLS / Certificates
- Click Configure Certificate
- Select Let’s Encrypt
- Enter the following data:
- Domains: Your domain(s), e.g.,
*.example.com - Email: For expiration notifications
- Challenge Type: DNS-01
- DNS Provider: Manual
- Domains: Your domain(s), e.g.,
- Click Request Certificate
- The UI shows you the required TXT records:
Name: _acme-challenge.example.comValue: abc123xyz...- Create the TXT record at your DNS provider
- Wait for DNS propagation (can take up to 24 hours)
- Click Confirm DNS Challenge
- Restart ReadyStackGo
Step-by-step: DNS-01 Challenge (Cloudflare)
Section titled “Step-by-step: DNS-01 Challenge (Cloudflare)”With Cloudflare, DNS records are automatically created and deleted.
-
Create a Cloudflare API token:
- Go to Cloudflare Dashboard → Profile → API Tokens
- Click Create Token
- Select Edit zone DNS as template
- Restrict to your zone
- Copy the token
-
Navigate to Settings → TLS / Certificates
-
Click Configure Certificate
-
Select Let’s Encrypt
-
Enter the following data:
- Domains: Your domain(s)
- Email: For expiration notifications
- Challenge Type: DNS-01
- DNS Provider: Cloudflare
- Cloudflare API Token: The copied token
- Cloudflare Zone ID: (Optional) Found in Cloudflare Dashboard under Overview
-
Click Request Certificate
-
Restart ReadyStackGo
Automatic Renewal
Section titled “Automatic Renewal”ReadyStackGo automatically renews Let’s Encrypt certificates:
- Check interval: Every 12 hours
- Renewal: 30 days before expiration
- Status: Visible under Settings → TLS
If automatic renewal fails:
- Check the error under Settings → TLS
- Ensure the challenge still works
- For DNS-01 Manual: Create the new TXT record
Staging vs. Production
Section titled “Staging vs. Production”Let’s Encrypt has strict rate limits for production certificates. For testing:
- Enable Use Staging
- Test the complete configuration
- Staging certificates are not trusted by browsers (warning)
- Disable staging for the real certificate
- Request a new certificate
Reverse Proxy Configuration
Section titled “Reverse Proxy Configuration”When to use?
Section titled “When to use?”When ReadyStackGo runs behind an edge proxy:
- nginx as reverse proxy
- Traefik for container routing
- HAProxy for load balancing
- Cloud Load Balancers (AWS ALB, Azure App Gateway, etc.)
SSL Handling Modes
Section titled “SSL Handling Modes”ReadyStackGo supports three modes for SSL communication with the proxy:
SSL Termination
Section titled “SSL Termination”Client ──HTTPS──► Proxy ──HTTP──► ReadyStackGoDescription:
- The proxy terminates SSL and decrypts the traffic
- ReadyStackGo receives unencrypted HTTP traffic
- ReadyStackGo does not need a certificate
When to use:
- Proxy manages all certificates (e.g., Traefik with Let’s Encrypt)
- Simplest configuration
- Internal connection (proxy and ReadyStackGo in the same network)
Configuration:
- Navigate to Settings → TLS / Certificates
- Enable Reverse Proxy Mode
- Select SSL Termination
- Restart ReadyStackGo
Nginx Example:
server { listen 443 ssl; server_name rsgo.example.com;
ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem;
location / { proxy_pass http://readystackgo:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; }}SSL Passthrough
Section titled “SSL Passthrough”Client ──HTTPS──► Proxy ──HTTPS──► ReadyStackGo (encrypted passthrough)Description:
- The proxy forwards encrypted traffic unchanged
- ReadyStackGo terminates SSL
- ReadyStackGo requires a certificate
When to use:
- End-to-end encryption required
- ReadyStackGo manages its own certificate
- Layer 4 load balancing (TCP proxy)
Configuration:
- Configure a certificate in ReadyStackGo (self-signed, custom, or Let’s Encrypt)
- Navigate to Settings → TLS / Certificates
- Enable Reverse Proxy Mode
- Select SSL Passthrough
- Restart ReadyStackGo
Nginx Example (Stream Module):
stream { upstream readystackgo { server readystackgo:8443; }
server { listen 443; proxy_pass readystackgo; }}Traefik Example:
entryPoints: websecure: address: ":443"
# Dynamic configtcp: routers: rsgo: rule: "HostSNI(`rsgo.example.com`)" service: rsgo tls: passthrough: true services: rsgo: loadBalancer: servers: - address: "readystackgo:8443"Re-Encryption
Section titled “Re-Encryption”Client ──HTTPS──► Proxy ──HTTPS──► ReadyStackGo (terminated) (re-encrypted)Description:
- The proxy terminates the client SSL connection
- The proxy creates a new SSL connection to ReadyStackGo
- Both sides need certificates
When to use:
- Compliance requires encrypted internal connections
- Zero-trust network
- Proxy and ReadyStackGo in different network segments
Configuration:
- Configure a certificate in ReadyStackGo
- Navigate to Settings → TLS / Certificates
- Enable Reverse Proxy Mode
- Select Re-Encryption
- Restart ReadyStackGo
Nginx Example:
server { listen 443 ssl; server_name rsgo.example.com;
ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem;
location / { proxy_pass https://readystackgo:8443; proxy_ssl_verify off; # For self-signed backend certificate proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; }}Forwarded Headers
Section titled “Forwarded Headers”With SSL Termination and Re-Encryption, ReadyStackGo automatically processes X-Forwarded-* headers:
| Header | Description |
|---|---|
X-Forwarded-For | Real client IP (important for logs and rate limiting) |
X-Forwarded-Proto | Original protocol (http/https) for correct redirects |
X-Forwarded-Host | Original hostname for URL generation |
These headers are automatically trusted when reverse proxy mode is enabled.
SSL Mode Comparison Table
Section titled “SSL Mode Comparison Table”| Aspect | SSL Termination | SSL Passthrough | Re-Encryption |
|---|---|---|---|
| Certificate in ReadyStackGo | Not needed | Required | Required |
| Proxy certificate | Required | Not needed | Required |
| Traffic to backend | HTTP | HTTPS | HTTPS |
| Forwarded Headers | Yes | No | Yes |
| Proxy can read traffic | Yes | No | Yes |
| Configuration complexity | Low | Medium | Medium |
Enable/Disable HTTP Port
Section titled “Enable/Disable HTTP Port”ReadyStackGo can optionally also serve HTTP (unencrypted):
- Navigate to Settings → TLS / Certificates
- Enable or disable HTTP Enabled
- Restart ReadyStackGo
Troubleshooting
Section titled “Troubleshooting”Certificate is not loaded
Section titled “Certificate is not loaded”Problem: After upload, the old certificate is still shown.
Solution: ReadyStackGo must be restarted for the new certificate to be loaded.
Let’s Encrypt fails
Section titled “Let’s Encrypt fails”Problem: “Failed to validate domain”
Possible causes:
- HTTP-01: Port 80 not reachable
- DNS-01: TXT record not created or not yet propagated
- Domain not pointing to server: Check DNS record
Debug steps:
- Check the error under Settings → TLS
- Test port 80 reachability:
curl http://yourdomain.com/.well-known/acme-challenge/test - Check DNS:
dig TXT _acme-challenge.yourdomain.com
Browser shows security warning
Section titled “Browser shows security warning”With self-signed certificate: Expected. Use Let’s Encrypt or a CA certificate for production.
With Let’s Encrypt: Check if you’re in staging mode. Staging certificates are not trusted.
Proxy gets “Connection refused”
Section titled “Proxy gets “Connection refused””Problem: The reverse proxy cannot reach ReadyStackGo.
Check:
- Is ReadyStackGo running?
docker ps - Correct port? HTTP = 8080, HTTPS = 8443
- Network connectivity?
docker network ls
Related Links
Section titled “Related Links”- Installation - Install ReadyStackGo
- Stack Deployment - Deploy stacks