Cloud House Technologies Logo
CloudHouse Technologies
HomeServicesProjectsBlogAbout UsCareersContact UsLogin
    Cloud House Technologies Logo
    CloudHouse Technologies
    HomeServicesProjectsBlogAbout UsCareersContact UsLogin

    How to Install Let's Encrypt SSL on Webmin with Auto-Renewal (2026 Guide)

    Priya

    Content Writer & Researcher

    Last Updated: 1 July 2026
    How to Install Lets Encrypt SSL on Webmin with Auto-Renewal (2026 Guide)
    🖥️

    Expert Webmin SSL Setup and Certificate Management Service

    Configuring Let's Encrypt on Webmin — from miniserv.conf edits to renewal hooks — is easy to get wrong, and a misconfigured SSL breaks panel access instantly. CloudHouse's server management team handles end-to-end SSL setup, auto-renewal verification, and ongoing certificate health checks so your Webmin panel stays secure without the hassle.

    🔧 Book Free DiagnosisCall NowWhatsApp
    🖥️12,400+PCs Fixed
    ⭐4.9★Google Rating
    ⚡<15 minAvg. Response
    🛡️ISO 27001Certified

    If you manage your Linux server through Webmin and want to secure it with a trusted SSL certificate, Webmin SSL certificate setup using Let's Encrypt is the most reliable and cost-free approach available in 2026. Let's Encrypt provides free, browser-trusted certificates that auto-renew every 90 days — eliminating the risk of expired certificates and browser security warnings. This step-by-step guide walks you through installing Let's Encrypt SSL on Webmin, wiring it to the Webmin panel itself, enabling auto-renewal, and fixing the most common errors like the miniserv.pem permission problem.

    Prerequisites: Before Installing SSL on Webmin

    Before running a single command, verify all of the following are in place. Skipping these checks is the number one reason Let's Encrypt validation fails.

    System Requirements

    • OS: Ubuntu 20.04/22.04/24.04, Debian 11/12, or CentOS 7/8/Stream — all supported
    • Webmin version: 1.984 or later (older versions lack the built-in Let's Encrypt module)
    • Root or sudo access to the server
    • A fully qualified domain name (FQDN) pointing to your server's public IP address
    • Port 80 open on your firewall — Let's Encrypt HTTP-01 challenge requires inbound HTTP access during validation
    • Port 443 open for HTTPS traffic after certificate installation
    • Certbot installed (or use Webmin's built-in ACME client — both methods covered below)

    Verify DNS Propagation

    Run the following command to confirm your domain resolves to your server's IP before proceeding:

    dig +short yourdomain.com A
    curl -I http://yourdomain.com

    If the IP does not match your server, Let's Encrypt validation will fail with a DNS problem: NXDOMAIN looking up A for error. Wait for DNS to propagate (typically 5–30 minutes) before continuing.

    Install Certbot

    If certbot is not already installed, install it now:

    # Ubuntu/Debian
    sudo apt update
    sudo apt install certbot -y
    
    # CentOS/RHEL (via EPEL)
    sudo yum install epel-release -y
    sudo yum install certbot -y

    Open Required Firewall Ports

    On UFW (Ubuntu):

    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 10000/tcp   # Webmin default port
    sudo ufw reload

    On firewalld (CentOS/RHEL):

    sudo firewall-cmd --permanent --add-port=80/tcp
    sudo firewall-cmd --permanent --add-port=443/tcp
    sudo firewall-cmd --permanent --add-port=10000/tcp
    sudo firewall-cmd --reload

    💡 None of these worked? Skip the guesswork.

    Get Expert Help →

    Install Let's Encrypt SSL via Webmin UI

    Webmin includes a built-in Let's Encrypt module that handles certificate issuance without requiring manual certbot commands. This is the easiest path for most administrators.

    1Log in to the Webmin Panel

    Navigate to https://your-server-ip:10000 and log in with your root credentials. If you see a browser SSL warning, click "Advanced" and "Accept the Risk" — this is expected before we install the certificate.

    2Navigate to the Let's Encrypt Module

    Go to Webmin → Webmin Configuration → SSL Encryption. Click the "Let's Encrypt" tab. If this tab is missing, your Webmin version is outdated — run apt upgrade webmin or download the latest .deb from webmin.com.

    3Configure the Domain

    In the "Hostnames for certificate" field, enter your domain and optionally the www subdomain:

    yourdomain.com
    www.yourdomain.com

    Set "Website root directory for validation file" to /var/www/html (or wherever your web server's document root is). This is where the HTTP-01 challenge file is temporarily placed during validation.

    4Request the Certificate

    Click "Request Certificate". Webmin will:

    • Contact Let's Encrypt's ACME server
    • Create a temporary challenge file in /.well-known/acme-challenge/
    • Let's Encrypt verifies the file over HTTP (port 80)
    • Issue the certificate on success

    On success you'll see: Certificate and key have been saved.

    5Verify Certificate Files

    The issued certificates are stored at:

    /etc/letsencrypt/live/yourdomain.com/fullchain.pem   # Certificate + chain
    /etc/letsencrypt/live/yourdomain.com/privkey.pem      # Private key
    /etc/letsencrypt/live/yourdomain.com/cert.pem         # Certificate only
    /etc/letsencrypt/live/yourdomain.com/chain.pem        # Chain only

    Install via Certbot CLI (Alternative Method)

    If you prefer the command line, or the Webmin UI method fails, use certbot directly:

    # Standalone mode (temporarily binds port 80)
    sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
    
    # Webroot mode (if Apache/Nginx is already running)
    sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com

    Use standalone mode if no web server is running on port 80. Use webroot mode if Apache or Nginx is active and serving your domain.

    1Test the Renewal Process

    Always perform a dry run before trusting the renewal hook:

    sudo certbot renew --dry-run

    A successful dry run outputs: Congratulations, all simulated renewals succeeded. If you see errors, fix them before relying on automated renewal.

    2Verify the Certbot Systemd Timer

    On Ubuntu/Debian, certbot installs a systemd timer automatically:

    sudo systemctl status certbot.timer
    sudo systemctl list-timers | grep certbot

    You should see certbot.timer listed as active. It typically runs twice daily. If the timer is missing or inactive:

    sudo systemctl enable certbot.timer
    sudo systemctl start certbot.timer
    3Add a Renewal Hook to Restart Webmin

    After certificate renewal, Webmin must be restarted to pick up the new certificate. Create a renewal hook:

    sudo nano /etc/letsencrypt/renewal-hooks/deploy/restart-webmin.sh

    Add the following content:

    #!/bin/bash
    # Restart Webmin after Let's Encrypt certificate renewal
    /etc/init.d/webmin restart
    # Or use systemctl if Webmin runs as a systemd service:
    # systemctl restart webmin

    Make the hook executable:

    sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-webmin.sh

    This script runs automatically after every successful renewal. Without it, Webmin continues serving the old (expired) certificate even after certbot renews it.

    4Cron-Based Renewal (Alternative)

    If your server uses cron instead of systemd timers:

    sudo crontab -e

    Add this line:

    0 3 * * * /usr/bin/certbot renew --quiet && /etc/init.d/webmin restart

    This runs daily at 3 AM, renews the certificate if it expires within 30 days, and restarts Webmin.

    5Configure Webmin's Built-in Auto-Renewal

    Webmin also has its own renewal scheduler: go to Webmin → Webmin Configuration → SSL Encryption → Let's Encrypt and enable "Automatically renew this certificate?". Set months before expiry to 1 (renew 30 days before expiry).

    1Locate the Webmin Configuration File

    The core Webmin server config is at:

    /etc/webmin/miniserv.conf
    2Update miniserv.conf with the Certificate Paths
    sudo nano /etc/webmin/miniserv.conf

    Find and update (or add) the following lines:

    ssl=1
    keyfile=/etc/letsencrypt/live/yourdomain.com/privkey.pem
    certfile=/etc/letsencrypt/live/yourdomain.com/fullchain.pem
    extracas=/etc/letsencrypt/live/yourdomain.com/chain.pem

    The certfile should point to fullchain.pem (not just cert.pem) — this includes the intermediate certificate chain that browsers require for trust validation.

    3Restart Webmin
    sudo /etc/init.d/webmin restart
    # or
    sudo systemctl restart webmin
    4Verify the SSL Certificate

    Test that Webmin is now serving the Let's Encrypt certificate:

    openssl s_client -connect yourdomain.com:10000 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -subject -dates

    The issuer should show Let's Encrypt. If it still shows Webmin Webserver on, the restart did not complete or miniserv.conf was not saved correctly.

    5Via Webmin UI (Easier Method)

    Alternatively, go to Webmin → Webmin Configuration → SSL Encryption → Current Certificate. Click "Copy to Webmin" — this automatically updates miniserv.conf and restarts miniserv.

    Troubleshooting: Fix Common Webmin SSL Errors

    Error: miniserv.pem Permission Denied

    Webmin's older configurations used a combined miniserv.pem file. If you see permission errors related to this file:

    ls -la /etc/webmin/miniserv.pem
    sudo chown root:root /etc/webmin/miniserv.pem
    sudo chmod 600 /etc/webmin/miniserv.pem

    If you've switched to separate keyfile/certfile paths in miniserv.conf, the miniserv.pem directive can be removed entirely. Ensure the pem= line is absent or commented out when using the separate keyfile= and certfile= directives.

    Error: "Too many certificates already issued"

    Let's Encrypt enforces a rate limit of 5 duplicate certificates per 7-day rolling window per domain. If you hit this:

    # Check existing certificates
    sudo certbot certificates
    
    # Use --staging flag for testing (no rate limits)
    sudo certbot certonly --standalone --staging -d yourdomain.com

    Wait 7 days, or use a slightly different domain list (e.g., add a subdomain) to issue a new certificate sooner.

    Error: Connection Refused on Port 80

    The HTTP-01 challenge requires port 80 to be accessible. Verify:

    # Check if something is listening on port 80
    sudo ss -tlnp | grep :80
    
    # Test external access
    curl -I http://yourdomain.com/.well-known/acme-challenge/test

    If Apache or Nginx is blocking port 80, stop it temporarily during certificate issuance with --standalone mode, or configure it to serve the challenge directory via the webroot plugin.

    Error: Certificate Not Trusted in Browser After Install

    This occurs when miniserv.conf points to cert.pem instead of fullchain.pem. The browser receives the leaf certificate without the intermediate chain. Fix:

    sudo sed -i 's|certfile=.*cert.pem|certfile=/etc/letsencrypt/live/yourdomain.com/fullchain.pem|' /etc/webmin/miniserv.conf
    sudo systemctl restart webmin

    Error: Webmin Shows Old Certificate After Renewal

    The deploy hook is missing or not executable. Verify:

    ls -la /etc/letsencrypt/renewal-hooks/deploy/
    sudo certbot renew --dry-run --deploy-hook "/etc/init.d/webmin restart"

    Error: ACME Challenge File Not Accessible

    If Let's Encrypt cannot fetch the challenge file, check your web server's document root:

    sudo mkdir -p /var/www/html/.well-known/acme-challenge
    sudo chown -R www-data:www-data /var/www/html/.well-known

    Ensure your web server is not redirecting /.well-known/acme-challenge/ to HTTPS before the certificate is issued (chicken-and-egg problem). Temporarily allow HTTP-only access to that path.

    Verify Full SSL Config After Fixing Errors

    # Check certificate expiry
    sudo certbot certificates
    
    # Check miniserv config is correct
    grep -E "ssl|keyfile|certfile|extracas|pem" /etc/webmin/miniserv.conf
    
    # End-to-end SSL test
    openssl s_client -connect yourdomain.com:10000 2>/dev/null | openssl x509 -noout -dates

    If you find Webmin SSL configuration consistently difficult to maintain, managed server management from CloudHouse handles certificate issuance, renewal hooks, miniserv configuration, and ongoing SSL health monitoring for you.

    FAQs

    Get the Free Linux Server Admin Cheatsheet (PDF)

    Essential commands for server management, networking, and troubleshooting — all on one printable page.

    Running Linux servers? Let us manage them for you.

    Our Managed Linux Server plans cover updates, security hardening, monitoring, and 24/7 incident response — so your servers stay up and your team stays focused.

    • Proactive OS patching and security updates
    • 24×7 monitoring with instant alerting
    • Backup configuration and disaster recovery
    • Dedicated Linux engineers on call
    See Pricing Plans →

    What our customers say

    “Our production server went down at 2 AM. CloudHouse had it back online in under 20 minutes. Incredible response time.”

    Arun S.

    CTO, SaaS Startup

    “They migrated our entire infrastructure from Ubuntu 18 to 22 with zero downtime. Couldn't have asked for better.”

    Deepak N.

    DevOps Lead

    Frequently Asked Questions

    Yes. You can use certbot directly from the command line with either --standalone mode (certbot certonly --standalone -d yourdomain.com) or --webroot mode if a web server is already running. After obtaining the certificate, manually update /etc/webmin/miniserv.conf with the keyfile and certfile paths pointing to /etc/letsencrypt/live/yourdomain.com/ and restart Webmin.

    Book your free 15-minute diagnosis

    A certified technician will call you back within 15 minutes during business hours.

    Share this article

    Leave a Comment

    Comments (0)

    Loading comments...

    Need Help Setting Up SSL on Webmin?

    Struggling with Webmin SSL errors like miniserv.pem permission issues, failed Let's Encrypt validation, or certificates that won't auto-renew? You're not alone — Webmin's SSL configuration has several non-obvious gotchas that trip up even experienced admins. Our server management specialists configure Let's Encrypt, set up renewal hooks, and verify HTTPS is working end-to-end, so you can focus on running your business instead of chasing certificate errors.

    Call Now — FreeWhatsApp Us

    Why CloudHouse?

    • ISO 27001:2022 certified
    • 12,400+ devices supported
    • 4.9★ on Google
    • Sub-15-minute response

    CloudHouse Technologies

    Innovative cloud solutions for modern businesses. We deliver cutting-edge technology with exceptional service.

    Contact Us

    CloudHouse Technologies Pvt.Ltd
    Special Economic Zone(SEZ),
    Infopark Thirissur,4B-15,
    Indeevaram,Nalukettu Road,
    Koratty, Kerala, India-680308
    0480-27327360
    info@cloudhousetechnologies.com

    Quick Links

    • Our Services
    • Gold Loan Software
    • About Us
    • Contact
    • Terms and Conditions
    • Privacy Policy
    ISO27001:2022
    Certified

    © 2026 CloudHouse Technologies Pvt.Ltd. All rights reserved.

    Back to top