Skip to content

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.

ReadyStackGo supports various TLS/HTTPS configurations:

OptionUse CaseComplexity
Self-SignedDevelopment, testing, internal networkNo configuration needed
Custom CertificateCorporate CA, purchased certificatesFile upload
Let’s EncryptProduction environments with public domainDomain validation
Reverse ProxyBehind nginx, Traefik, HAProxy, etc.Proxy-dependent

All settings are located under Settings → TLS / Certificates in the Web UI.


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.

  • Local development - Encryption without CA setup
  • Internal test systems - When security warnings are acceptable
  • Docker development - Quick start without certificate configuration
  1. On first start, ReadyStackGo checks if a certificate exists
  2. If not, a self-signed certificate is automatically generated
  3. The certificate is stored at /app/config/tls/selfsigned.pfx
  4. Validity: 365 days

If you’ve uploaded a custom certificate and want to switch back to self-signed:

  1. Navigate to Settings → TLS / Certificates
  2. Click Configure Certificate
  3. Select Reset to Self-Signed
  4. Confirm the action
  5. Restart ReadyStackGo to load the new certificate

  • Corporate CA - Internal Certificate Authority
  • Purchased certificates - From a public CA (DigiCert, Comodo, etc.)
  • Wildcard certificates - One certificate for multiple subdomains

ReadyStackGo accepts two certificate formats:

FormatFilesTypical Source
PFX/PKCS#12Single .pfx/.p12 file with passwordWindows export, IIS
PEMSeparate certificate and key filesLinux, OpenSSL, Let’s Encrypt
  1. Navigate to Settings → TLS / Certificates
  2. Click Configure Certificate
  3. Select Upload PFX Certificate
  4. Choose the .pfx file
  5. Enter the password (if any)
  6. Click Upload
  7. Restart ReadyStackGo
  1. Navigate to Settings → TLS / Certificates
  2. Click Configure Certificate
  3. Select Upload PEM Certificate
  4. Paste the certificate file content (starts with -----BEGIN CERTIFICATE-----)
  5. Paste the key file content (starts with -----BEGIN PRIVATE KEY----- or -----BEGIN RSA PRIVATE KEY-----)
  6. Click Upload
  7. Restart ReadyStackGo

If you need a self-signed certificate with longer validity or specific settings:

Terminal window
# 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.pem

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.

  • 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

Let’s Encrypt uses challenges to verify that you control the domain:

ChallengeRequirementAdvantages
HTTP-01Port 80 reachableSimplest setup
DNS-01DNS accessWildcard support, no port 80 needed

This method is easiest when ReadyStackGo is directly reachable from the internet.

Prerequisite: Port 80 must point to your server (not just port 443).

  1. Navigate to Settings → TLS / Certificates
  2. Click Configure Certificate
  3. Select Let’s Encrypt
  4. Enter the following data:
    • Domains: Your domain(s), e.g., rsgo.example.com
    • Email: For expiration notifications
    • Challenge Type: HTTP-01
  5. Optional: Enable Use Staging for testing (no real certificates)
  6. Click Request Certificate
  7. Wait for validation (seconds to minutes)
  8. Restart ReadyStackGo

This method requires manual creation of DNS records but also works for wildcard domains.

  1. Navigate to Settings → TLS / Certificates
  2. Click Configure Certificate
  3. Select Let’s Encrypt
  4. Enter the following data:
    • Domains: Your domain(s), e.g., *.example.com
    • Email: For expiration notifications
    • Challenge Type: DNS-01
    • DNS Provider: Manual
  5. Click Request Certificate
  6. The UI shows you the required TXT records:
Name: _acme-challenge.example.com
Value: abc123xyz...
  1. Create the TXT record at your DNS provider
  2. Wait for DNS propagation (can take up to 24 hours)
  3. Click Confirm DNS Challenge
  4. 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.

  1. Create a Cloudflare API token:

  2. Navigate to Settings → TLS / Certificates

  3. Click Configure Certificate

  4. Select Let’s Encrypt

  5. 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
  6. Click Request Certificate

  7. Restart ReadyStackGo

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:

  1. Check the error under Settings → TLS
  2. Ensure the challenge still works
  3. For DNS-01 Manual: Create the new TXT record

Let’s Encrypt has strict rate limits for production certificates. For testing:

  1. Enable Use Staging
  2. Test the complete configuration
  3. Staging certificates are not trusted by browsers (warning)
  4. Disable staging for the real certificate
  5. Request a new certificate

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.)

ReadyStackGo supports three modes for SSL communication with the proxy:

Client ──HTTPS──► Proxy ──HTTP──► ReadyStackGo

Description:

  • 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:

  1. Navigate to Settings → TLS / Certificates
  2. Enable Reverse Proxy Mode
  3. Select SSL Termination
  4. 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;
}
}
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:

  1. Configure a certificate in ReadyStackGo (self-signed, custom, or Let’s Encrypt)
  2. Navigate to Settings → TLS / Certificates
  3. Enable Reverse Proxy Mode
  4. Select SSL Passthrough
  5. Restart ReadyStackGo

Nginx Example (Stream Module):

stream {
upstream readystackgo {
server readystackgo:8443;
}
server {
listen 443;
proxy_pass readystackgo;
}
}

Traefik Example:

traefik.yml
entryPoints:
websecure:
address: ":443"
# Dynamic config
tcp:
routers:
rsgo:
rule: "HostSNI(`rsgo.example.com`)"
service: rsgo
tls:
passthrough: true
services:
rsgo:
loadBalancer:
servers:
- address: "readystackgo:8443"
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:

  1. Configure a certificate in ReadyStackGo
  2. Navigate to Settings → TLS / Certificates
  3. Enable Reverse Proxy Mode
  4. Select Re-Encryption
  5. 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;
}
}

With SSL Termination and Re-Encryption, ReadyStackGo automatically processes X-Forwarded-* headers:

HeaderDescription
X-Forwarded-ForReal client IP (important for logs and rate limiting)
X-Forwarded-ProtoOriginal protocol (http/https) for correct redirects
X-Forwarded-HostOriginal hostname for URL generation

These headers are automatically trusted when reverse proxy mode is enabled.

AspectSSL TerminationSSL PassthroughRe-Encryption
Certificate in ReadyStackGoNot neededRequiredRequired
Proxy certificateRequiredNot neededRequired
Traffic to backendHTTPHTTPSHTTPS
Forwarded HeadersYesNoYes
Proxy can read trafficYesNoYes
Configuration complexityLowMediumMedium

ReadyStackGo can optionally also serve HTTP (unencrypted):

  1. Navigate to Settings → TLS / Certificates
  2. Enable or disable HTTP Enabled
  3. Restart ReadyStackGo

Problem: After upload, the old certificate is still shown.

Solution: ReadyStackGo must be restarted for the new certificate to be loaded.

Problem: “Failed to validate domain”

Possible causes:

  1. HTTP-01: Port 80 not reachable
  2. DNS-01: TXT record not created or not yet propagated
  3. Domain not pointing to server: Check DNS record

Debug steps:

  1. Check the error under Settings → TLS
  2. Test port 80 reachability: curl http://yourdomain.com/.well-known/acme-challenge/test
  3. Check DNS: dig TXT _acme-challenge.yourdomain.com

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.

Problem: The reverse proxy cannot reach ReadyStackGo.

Check:

  1. Is ReadyStackGo running? docker ps
  2. Correct port? HTTP = 8080, HTTPS = 8443
  3. Network connectivity? docker network ls