How to Install Certbot Ssl

How to Install Certbot SSL Securing your website with HTTPS is no longer optional—it’s a necessity. Search engines like Google prioritize secure sites in rankings, modern browsers flag non-HTTPS sites as “Not Secure,” and users increasingly expect encrypted connections. One of the most reliable, free, and automated ways to obtain and manage SSL/TLS certificates is through Certbot, an open-source t

Nov 6, 2025 - 10:01
Nov 6, 2025 - 10:01
 1

How to Install Certbot SSL

Securing your website with HTTPS is no longer optionalits a necessity. Search engines like Google prioritize secure sites in rankings, modern browsers flag non-HTTPS sites as Not Secure, and users increasingly expect encrypted connections. One of the most reliable, free, and automated ways to obtain and manage SSL/TLS certificates is through Certbot, an open-source tool developed by the Electronic Frontier Foundation (EFF) in partnership with the Internet Security Research Group (ISRG), the organization behind Lets Encrypt.

Certbot simplifies the process of installing SSL certificates by automating certificate issuance, configuration, and renewal. Unlike traditional paid certificate providers that require manual generation, validation, and installation, Certbot integrates directly with your web serverwhether Apache, Nginx, or anotherusing a few simple commands. This tutorial provides a comprehensive, step-by-step guide to installing Certbot SSL on a Linux-based server, along with best practices, real-world examples, and troubleshooting tips to ensure your site remains secure and compliant.

By the end of this guide, youll understand not only how to install Certbot, but also how to maintain a robust, auto-renewing SSL setup that meets modern web standards and enhances user trust.

Step-by-Step Guide

Prerequisites

Before installing Certbot, ensure your server meets the following requirements:

  • A domain name registered and pointing to your servers public IP address via A or AAAA DNS records.
  • A web server (Apache or Nginx) running and accessible over HTTP on port 80.
  • Root or sudo privileges on your Linux server.
  • A firewall configured to allow HTTP (port 80) and HTTPS (port 443) traffic.

Verify your domain resolves correctly by running:

dig +short yourdomain.com

Ensure the output matches your servers public IP. If not, update your DNS settings and wait up to 48 hours for propagation.

Step 1: Update Your System

Always begin by updating your systems package list to ensure compatibility and security:

sudo apt update && sudo apt upgrade -y

For CentOS, RHEL, or Fedora systems, use:

sudo yum update -y

or for newer versions:

sudo dnf update -y

Step 2: Install Certbot

Certbot is available through multiple package managers. The recommended method is using the official Certbot snap package, which ensures you receive automatic updates and the latest features.

First, install snapd if its not already present:

sudo apt install snapd -y

Then, install Certbot via snap:

sudo snap install --classic certbot

Verify the installation:

certbot --version

You should see output similar to: certbot 2.9.0

If snap is unavailable or restricted in your environment, you can install Certbot via your systems package manager:

sudo apt install certbot python3-certbot-nginx -y

or for Apache:

sudo apt install certbot python3-certbot-apache -y

Step 3: Configure Your Web Server

Certbot requires your web server to be accessible on port 80 to validate domain ownership via HTTP-01 challenge. Ensure your server is serving content over HTTP.

For Nginx:

Edit your server block configuration:

sudo nano /etc/nginx/sites-available/yourdomain.com

Ensure it includes a server block listening on port 80:

server {

listen 80;

server_name yourdomain.com www.yourdomain.com;

root /var/www/html;

index index.html;

}

Test the configuration:

sudo nginx -t

Reload Nginx if the test passes:

sudo systemctl reload nginx

For Apache:

Ensure your virtual host is configured to listen on port 80:

sudo nano /etc/apache2/sites-available/yourdomain.com.conf

Include:

<VirtualHost *:80>

ServerName yourdomain.com

ServerAlias www.yourdomain.com

DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Enable the site and restart Apache:

sudo a2ensite yourdomain.com.conf

sudo systemctl restart apache2

Step 4: Obtain and Install the SSL Certificate

Now that your server is configured, use Certbot to request a certificate.

For Nginx Users:

Run the following command:

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Certbot will:

  1. Automatically detect your Nginx configuration.
  2. Request a certificate from Lets Encrypt.
  3. Perform domain validation via HTTP challenge.
  4. Modify your Nginx configuration to serve HTTPS.
  5. Redirect HTTP traffic to HTTPS automatically.

Youll be prompted to enter an email address for security notifications and to agree to the Lets Encrypt Terms of Service. Select option 2 to redirect all HTTP traffic to HTTPS.

For Apache Users:

Run:

sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

The process is identical: Certbot will detect your Apache configuration, validate your domain, install the certificate, and update your virtual host to use HTTPS with automatic HTTP-to-HTTPS redirection.

Step 5: Verify the Installation

After successful installation, verify your SSL certificate is working:

  • Visit https://yourdomain.com in your browser. Look for the padlock icon.
  • Use online tools like SSL Labs SSL Test to analyze your certificate chain, key strength, and configuration.
  • Check certificate details in your browser by clicking the padlock ? Certificate ? Details.

Confirm the certificate is issued by R3 (Lets Encrypt) and is valid for both your domain and www subdomain.

Step 6: Test Automatic Renewal

Lets Encrypt certificates expire after 90 days. Certbot automatically sets up a cron job or systemd timer to renew certificates before expiration.

To test renewal manually:

sudo certbot renew --dry-run

If the test succeeds, youll see a message: Simulated renewal succeeded.

On systemd-based systems (Ubuntu 18.04+, Debian 10+), the timer is managed by:

sudo systemctl status snap.certbot.renew.timer

On older systems, check the cron job:

sudo crontab -l

You should see an entry similar to:

0 12 * * * /usr/bin/certbot renew --quiet

This runs twice daily to check for expiring certificates.

Best Practices

Use Strong Key Lengths

Always ensure your server generates 2048-bit or 4096-bit RSA keys. While 2048-bit is still considered secure, 4096-bit provides additional future-proofing. Certbot defaults to 2048-bit, but you can override this during initial issuance:

sudo certbot --nginx -d yourdomain.com --rsa-key-size 4096

Enable HTTP Strict Transport Security (HSTS)

HSTS tells browsers to only connect to your site via HTTPS for a specified period. Add the following header to your server configuration:

Nginx:

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

Apache:

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

After testing, submit your domain to the HSTS Preload List at https://hstspreload.org to ensure browsers enforce HTTPS globally.

Secure Your Certificate Files

Certbot stores certificates in /etc/letsencrypt/live/yourdomain.com/. These files are readable only by root. Never expose them publicly or include them in version control.

Verify permissions:

ls -la /etc/letsencrypt/live/yourdomain.com/

Ensure all files are owned by root and have permissions 600 or 644.

Monitor Certificate Expiry

Even with automatic renewal, set up monitoring to receive alerts if renewal fails. Use a simple script to check expiration dates:

openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -noout -dates

Or use a third-party monitoring tool like UptimeRobot or StatusCake to alert you if your SSL certificate expires or becomes invalid.

Avoid Wildcard Certificates Unless Necessary

While wildcard certificates (*.yourdomain.com) are convenient, they require DNS-01 validation, which is more complex and requires API access to your DNS provider. For most websites, a standard certificate covering yourdomain.com and www.yourdomain.com is sufficient and easier to manage.

Disable Older TLS Protocols

Ensure your server disables TLS 1.0 and TLS 1.1. Use modern protocols only:

Nginx:

ssl_protocols TLSv1.2 TLSv1.3;

ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;

ssl_prefer_server_ciphers off;

Apache:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA384

SSLHonorCipherOrder off

Use tools like SSL Labs to validate your cipher suite configuration.

Use OCSP Stapling

OCSP stapling improves performance and privacy by allowing your server to provide certificate revocation status directly, eliminating the need for browsers to contact the CA.

Nginx:

ssl_stapling on;

ssl_stapling_verify on;

resolver 8.8.8.8 8.8.4.4 valid=300s;

resolver_timeout 5s;

Apache:

SSLUseStapling on

SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

Tools and Resources

Essential Tools for SSL Management

Command-Line Utilities

Use these commands for diagnostics:

  • openssl s_client -connect yourdomain.com:443 -servername yourdomain.com View certificate details.
  • curl -I https://yourdomain.com Check HTTP headers including HSTS and certificate info.
  • certbot certificates List all installed certificates and their expiration dates.
  • sudo journalctl -u snap.certbot.renew.timer View renewal logs on systemd systems.

Automation and Integration

For advanced setups, integrate Certbot with:

  • Docker Use official Certbot containers for containerized environments.
  • Ansible Automate SSL deployment across multiple servers.
  • Cloudflare Use Cloudflares proxy with origin certificates for added security layers.
  • ACME clients For non-standard servers, use acme.sh or lego as alternatives to Certbot.

Community and Support

While Certbot does not offer paid support, these resources are invaluable:

Real Examples

Example 1: Installing Certbot on Ubuntu 22.04 with Nginx

Scenario: Youre managing a WordPress site hosted on Ubuntu 22.04 with Nginx. The site is live at example.com and www.example.com.

Steps taken:

  1. Updated system: sudo apt update && sudo apt upgrade -y
  2. Installed snapd and Certbot: sudo snap install --classic certbot
  3. Confirmed Nginx was serving content on port 80.
  4. Executed: sudo certbot --nginx -d example.com -d www.example.com
  5. Selected option 2 to redirect HTTP to HTTPS.
  6. Verified installation via browser and SSL Labs test (A+ rating achieved).
  7. Added HSTS header to Nginx config and submitted to HSTS preload list.

Result: The site now loads securely with a green padlock. Bounce rate decreased by 18% over 30 days, and Google Search Console reported zero HTTPS errors.

Example 2: Migrating from a Paid Certificate to Lets Encrypt

Scenario: A business previously used a $99/year commercial certificate from a legacy vendor. They wanted to reduce costs and automate renewal.

Process:

  1. Backed up existing certificate and private key.
  2. Installed Certbot on the same server.
  3. Used sudo certbot --apache -d business.com -d www.business.com to issue a new certificate.
  4. Updated server config to point to the new Certbot certificate paths: /etc/letsencrypt/live/business.com/fullchain.pem and privkey.pem.
  5. Removed old certificate files and revoked the paid certificate through the vendors portal.
  6. Set up monitoring via a simple cron job that emails a summary of certificate expiry dates weekly.

Outcome: Annual SSL costs reduced to $0. Renewals became fully automated. No downtime occurred during the transition.

Example 3: Multi-Domain Setup with Nginx

Scenario: A company hosts three sites on one server: site1.com, site2.com, and site3.com.

Solution:

  • Each site has its own Nginx server block.
  • Certbot was run once for each domain:
sudo certbot --nginx -d site1.com -d www.site1.com

sudo certbot --nginx -d site2.com -d www.site2.com

sudo certbot --nginx -d site3.com -d www.site3.com

Alternatively, a single certificate can cover all domains:

sudo certbot --nginx -d site1.com -d www.site1.com -d site2.com -d www.site2.com -d site3.com -d www.site3.com

Result: One certificate with six subject alternative names (SANs) was issued. All sites are secured with HTTPS, and renewal is handled automatically.

FAQs

Is Certbot free to use?

Yes. Certbot is completely free and open-source. The SSL certificates it issues through Lets Encrypt are also free. There are no hidden fees or subscription charges.

Does Certbot work with shared hosting?

It depends. Most shared hosting providers do not allow root access or custom server configuration, which are required for Certbot. However, many providers (like SiteGround, Bluehost, and DreamHost) now offer one-click Lets Encrypt SSL installation through their control panels. Use their built-in tools if available.

Can I use Certbot on Windows?

Certbot does not officially support Windows. However, you can use alternative ACME clients like Win-ACME or PowerShell scripts with Lets Encrypt. For Windows servers, consider using IIS with a third-party tool or migrate to Linux for better SSL automation support.

What happens if my certificate expires?

If a certificate expires, browsers will display a warning to users, and your site may be flagged as insecure. SEO rankings may drop, and conversion rates can suffer. Certbots automatic renewal system prevents this, but you must ensure the renewal process isnt blocked (e.g., by firewall rules or DNS changes).

Why does Certbot need port 80 open?

Certbot uses the HTTP-01 challenge to prove you control the domain. It places a temporary file on your server at a specific URL (e.g., http://yourdomain.com/.well-known/acme-challenge/...). Lets Encrypt then accesses this file to verify ownership. If port 80 is blocked, validation fails.

Can I use Certbot for internal or private domains?

No. Lets Encrypt only issues certificates for publicly resolvable domain names. You cannot use Certbot for local domains like internal.local or private IPs. For internal use, consider setting up your own Certificate Authority (CA) using tools like OpenSSL or Microsoft AD CS.

How often does Certbot renew certificates?

Certbot checks for renewal twice daily. Certificates are renewed only if they are within 30 days of expiration. This ensures certificates are always valid without unnecessary renewals.

What if my domain changes DNS providers?

If your DNS provider changes and your domain no longer resolves to your server, Certbots HTTP-01 challenge will fail. Update your DNS records to point to your servers IP before attempting renewal. Alternatively, switch to DNS-01 validation using your providers API (e.g., Cloudflare, Route 53).

Can I install Certbot on a server without a domain name?

No. SSL certificates require a valid domain name for issuance. You cannot secure an IP address directly with Lets Encrypt. Use a domain nameeven a subdomain like server.yourdomain.comto obtain a certificate.

Does Certbot support IPv6?

Yes. Certbot works seamlessly with IPv6. Ensure your DNS records include an AAAA record pointing to your servers IPv6 address, and configure your web server to listen on both IPv4 and IPv6.

Conclusion

Installing Certbot SSL is one of the most impactful security and performance improvements you can make to your website. Its free, automated, and widely trusted by millions of websites worldwide. By following this guide, youve not only secured your site with HTTPS but also implemented industry best practices for certificate management, server configuration, and long-term maintenance.

Remember: SSL is not a one-time task. Its an ongoing responsibility. Regularly monitor your certificate status, keep your server software updated, and stay informed about evolving security standards. Tools like Certbot make compliance easybut only if you use them consistently.

As web standards continue to evolve, HTTPS will become even more deeply integrated into browser behavior, search engine algorithms, and user expectations. By adopting Certbot today, youre not just securing your siteyoure future-proofing it.

Start with one domain. Master the process. Then scale to your entire infrastructure. The digital landscape rewards those who prioritize securityand with Certbot, thats never been easier.