Protect your Unified Security Stack v1.7.22 deployment by correctly configuring SSL/TLS certificates. This document explains manual setup, automatic creation through Let's Encrypt, and renewing certificates.
All access to the Unified Security Stack v1.7.22 web interface must use HTTPS. Correct SSL certificate setup is critical for production environments.
Certificate Requirements
Supported Certificate Types
Self-signed certificates (development/testing only)
Commercial certificates from trusted CAs
Let's Encrypt certificates (recommended, free)
Enterprise PKI certificates
File Requirements
You need two files:
Certificate file:
.crtor.pemextensionPrivate key file:
.keyor.pemextension
Under no circumstances share your private key. Keep it protected and backed up securely.
Method 1: Manual SSL Certificate Installation
Follow this approach when a Certificate Authority has already issued you a certificate.
Step 1: Prepare Certificate Files
After obtaining your certificate:
Rename the certificate file to
utm.crtRename the private key file to
utm.key
# Example renaming
mv your-certificate.crt utm.crt
mv your-private-key.key utm.keyStep 2: Transfer Files to Server
Copy both files to the Unified Security Stack certificate directory:
# Move certificate to Unified Security Stack directory
sudo mv utm.crt /synoti/cert/
sudo mv utm.key /synoti/cert/
# Set proper permissions
sudo chmod 600 /synoti/cert/utm.key
sudo chmod 644 /synoti/cert/utm.crtStep 3: Restart Services
Restart Docker services to apply the new certificate:
sudo systemctl restart dockerPlan for about 10 minutes while every service finishes restarting.
Step 4: Verify Installation
# Check certificate
openssl x509 -in /synoti/cert/utm.crt -text -noout
# Verify web interface
curl -I https://your-domain.comYour SSL certificate installation is complete! Open Unified Security Stack at https://your-domain.com
Method 2: Generate SSL with Let's Encrypt (Certbot)
Let's Encrypt supplies free, automated SSL certificates. Most deployments should use this recommended method.
Prerequisites
A registered domain name
Domain pointing to your Unified Security Stack server's public IP
Port 80 accessible from the internet (temporarily)
Step 1: Install Certbot
# Update package list
sudo apt update
# Install Certbot with Nginx plugin
sudo apt install certbot python3-certbot-nginx -yStep 2: Prepare Services
Stop the frontend service to allow Certbot to use port 80:
# Scale down frontend service
docker service scale synoti_frontend=0
# Verify frontend is stopped
docker ps | grep frontend
# Start Nginx temporarily
sudo systemctl start nginxThis Nginx instance is temporary and serves solely to generate certificates.
Step 3: Generate Certificate
Replace siem.yourdomain.com with your actual domain:
sudo certbot --nginx -d siem.yourdomain.comFollow the prompts:
Enter your email address
Agree to Terms of Service
Choose whether to share your email
Certbot will automatically generate and configure your certificate
Step 4: Install Certificate in Unified Security Stack
# Copy certificate files to Unified Security Stack directory
sudo cp /etc/letsencrypt/live/*/fullchain.pem /synoti/cert/utm.crt
sudo cp /etc/letsencrypt/live/*/privkey.pem /synoti/cert/utm.key
# Set proper permissions
sudo chmod 600 /synoti/cert/utm.key
sudo chmod 644 /synoti/cert/utm.crtStep 5: Restart Unified Security Stack Services
# Scale frontend back up
docker service scale synoti_frontend=1
# Verify frontend is running
docker ps | grep frontend
# Stop temporary Nginx
sudo systemctl stop nginx
# Restart Docker to apply changes
sudo systemctl restart dockerYour SSL certificate from Let's Encrypt is now active!
Certificate Renewal
Certificates from Let's Encrypt are valid for 90 days. Follow these steps to renew them.
Automatic Renewal (Recommended)
Automatic renewal is built into Certbot. Confirm it is configured:
# Check renewal timer
sudo systemctl status certbot.timer
# Test renewal process (dry run)
sudo certbot renew --dry-runManual Renewal
If you need to renew manually:
Step 1: Stop Frontend Service
docker service scale synoti_frontend=0Step 2: Renew Certificate
# Start Nginx for renewal
sudo systemctl start nginx
# Renew certificate
sudo certbot renew
# Stop Nginx
sudo systemctl stop nginxStep 3: Update Unified Security Stack Certificates
Replace siem.yourdomain.com with your domain:
sudo cp /etc/letsencrypt/live/siem.yourdomain.com/fullchain.pem /synoti/cert/utm.crt
sudo cp /etc/letsencrypt/live/siem.yourdomain.com/privkey.pem /synoti/cert/utm.keyStep 4: Restart Services
docker service scale synoti_frontend=1
docker ps | grep frontend
sudo systemctl restart dockerCertificate Renewal Automation Script
Create an automated renewal script:
#!/bin/bash
# /root/renew-utm-cert.sh
# Stop frontend
docker service scale synoti_frontend=0
sleep 10
# Start Nginx and renew
systemctl start nginx
certbot renew --quiet
systemctl stop nginx
# Update certificates
cp /etc/letsencrypt/live/*/fullchain.pem /Unified Security Stack/cert/utm.crt
cp /etc/letsencrypt/live/*/privkey.pem /Unified Security Stack/cert/utm.key
chmod 600 /Unified Security Stack/cert/utm.key
chmod 644 /Unified Security Stack/cert/utm.crt
# Restart services
docker service scale synoti_frontend=1
sleep 30
systemctl restart dockerMake it executable and add to cron:
# Make executable
chmod +x /root/renew-utm-cert.sh
# Add to crontab (runs monthly)
(crontab -l 2>/dev/null; echo "0 3 1 * * /root/renew-utm-cert.sh") | crontab -Alternative: Certbot with DNS Challenge
For environments where port 80 is not accessible:
# Install DNS plugin (example for Cloudflare)
sudo apt install python3-certbot-dns-cloudflare
# Create credentials file
echo "dns_cloudflare_api_token = YOUR_API_TOKEN" > ~/.secrets/cloudflare.ini
chmod 600 ~/.secrets/cloudflare.ini
# Generate certificate
sudo certbot certonly
--dns-cloudflare
--dns-cloudflare-credentials ~/.secrets/cloudflare.ini
-d siem.yourdomain.comMany providers support DNS plugins, including Route53, Google Cloud DNS, Azure DNS, and others.
Troubleshooting
Certificate not recognized by browser
Possible causes:
Incorrect certificate chain
Self-signed certificate without import
Solution:Ensure you're using the fullchain.pem (includes intermediate certificates)
For self-signed: Import CA certificate to browser
Certbot fails with 'Port 80 already in use'
Solution:
# Stop any service using port 80
docker service scale synoti_frontend=0
sudo systemctl stop nginx
sudo systemctl stop apache2
# Check what's using port 80
sudo netstat -tlnp | grep :80Certificate shows as expired
Solution:
Renew the certificate using the renewal process above
Check system date/time is correct
Verify certificate files are updated
Services won't restart after certificate update
Solution:
# Check Docker logs
docker service logs synoti_frontend
# Verify certificate files
openssl x509 -in /Unified Security Stack/cert/utm.crt -noout -dates
openssl rsa -in /Unified Security Stack/cert/utm.key -checkCertificate Monitoring
Monitor your certificate expiration:
# Check certificate expiration date
openssl x509 -enddate -noout -in /Unified Security Stack/cert/utm.crt
# Or check via web
echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -datesSecurity Best Practices
Wildcard Certificates
For multiple subdomains:
# Generate wildcard certificate
sudo certbot certonly
--manual
--preferred-challenges dns
-d "*.yourdomain.com"
-d "yourdomain.com"Use the on-screen instructions to add the DNS TXT records required for validation.
Support
If you encounter issues during certificate installation or renewal, contact Unified Security Stack support or consult the community forums.