How To Secure Nginx with Let's Encrypt Using Certbot

1. Installing Certbot

sudo apt install certbot python3-certbot-nginx

2. Nginx Configuration

Certbot should to be able to find the correct server block in your Nginx configuration for it to be able to automatically configure SSL for your domain. To achieve this it looks for a server_name directive that matches the domain name for which SSL certificate is requested.

To check, open the configuration file for your domain using vi or your favorite text editor:

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

It should look like this:

...
server_name yourdomain.com www.yourdomain.com;
...

If it doesn’t, update it to match the required configurations. Then save and close the file. Now verify the syntax of your configuration:

sudo nginx -t

If you get an error, reopen the server block file and check for errors on mentioned line number. Now check again for configuration block syntax and reload Nginx to reflect the latest changes:

sudo service nginx reload

3. Obtaining an SSL Certificate

To use this plugin, type the following:

-d to specify the domain names.

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

If certbot successfully passed challenge ,it will prompt to configure your HTTPS settings.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Select your choice then hit ENTER.

Output
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/yourdomain.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/yourdomain.com/privkey.pem
   Your cert will expire on 2020-08-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

5. Verifying Certbot Auto-Renewal

You can check the status of the timer with systemctl:

sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2023-11-20 20:04:36 UTC; 2 weeks 1 days ago
    Trigger: Thu 2023-11-20 09:22:32 UTC+5; 9h left
   Triggers: ● certbot.service

To verify the renewal process:

sudo certbot renew --dry-run

If you see no errors, you’re good to go. Certbot will renew your certificates and reload Nginx service to reflect latest changes, when required.

0
Subscribe to my newsletter

Read articles from Muhammad Atif Hasnain directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Muhammad Atif Hasnain
Muhammad Atif Hasnain

Expert in automating and managing complex deployments, ensuring smooth release management. Mastery in infrastructure as code with Terraform and Ansible for operational efficiency. Proficient in CI/CD methodologies, implementing pipelines with GitHub Actions, GitLab CI/CD, and Jenkins to enhance release reliability. Collaborative with development teams, leveraging Azure services to support secure, high-performance software solutions, and drive operational success.