Let’s Encrypt is a free, automated, and open certificate authority that provides SSL/TLS certificates. In this tutorial, we’ll show you how to install Let’s Encrypt certificates for Nginx on Ubuntu and how to automate the renewal process using Certbot.
Step 1: Install Certbot
Certbot is a free, open-source software tool that automates the process of obtaining and renewing SSL/TLS certificates from Let’s Encrypt.
To install Certbot, run the following command:
sudo apt install certbot
Step 2: Generate Let’s Encrypt Certificate
Next, we’ll use Certbot to generate a Let’s Encrypt SSL/TLS certificate for our domain.
Run the following command, replacing example.com
with your domain name:
sudo certbot certonly --nginx -d example.com,*.example.com --preferred-challenges dns-01
Certbot will automatically configure Nginx to use the SSL/TLS certificate.
Step 3: Configure Nginx to Use SSL/TLS
Now that we have the SSL/TLS certificate, we need to configure Nginx to use it.
Create a new server block in the Nginx configuration file /etc/nginx/sites-available/example.com
with the following content:
server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com www.example.com; index index.php index.htm index.html; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # SSL configuration ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers EECDH+AESGCM:EDH+AESGCM; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; # Add headers to serve security related headers add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; # Uncomment the following, if you're website is running WordPress # location / { # try_files $uri $uri/ /index.php?$args; # } # location ~ \.php$ { # try_files $uri =404; # fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # include fastcgi_params; # } }
Save and close the file, then activate the server block by creating a symbolic link in the sites-enabled
directory:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Test the Nginx configuration:
sudo nginx -t
If there are no errors, reload Nginx:
sudo systemctl reload nginx
Let’s Encrypt SSL/TLS certificates expire after 90 days. Certbot automatically installs a script that will run twice daily, at 12:00am and 12:00pm, and will renew any expiring certificates. You don’t need to do anything with your Cron jobs.