security|July 04, 2018|3 min read

How to Renew Lets Encrypt SSL Certificate

TL;DR

Use certbot renew or certbot certonly with the appropriate flags to renew your Let's Encrypt SSL certificate, handling common issues like port conflicts and Cloudflare DNS.

How to Renew Lets Encrypt SSL Certificate

Introduction to problem

This post is applicable for those who has already an SSL certificate from Lets Encrypt. And, wants to renew them.

Some Old Reference to Lets Encrypt commands

For previous posts about Lets Encrypt. See:

To know Certificate Expiry date

There may be a chance that you are running multiple websites from a server. You must be having an utility installed called: certbot. To get expiry date of each websites on your server, run:

sudo certbot certificates

It will list down all the certificates list and their expiry date. Sample output:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: abcdef.com
    Domains: abcdef.com www.abcdef.com
    Expiry Date: 2018-07-22 01:30:26+00:00 (INVALID: EXPIRED)
    Certificate Path: /etc/letsencrypt/live/abcdef.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/abcdef.com/privkey.pem
  Certificate Name: abcdefgh.com
    Domains: abcdefgh.com www.abcdefgh.com
    Expiry Date: 2019-03-07 08:02:01+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/abcdefgh.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/abcdefgh.com/privkey.pem
  Certificate Name: abcdefghij.com
    Domains: abcdefghij.com www.abcdefghij.com
    Expiry Date: 2019-03-07 08:03:10+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/abcdefghij.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/abcdefghij.com/privkey.pem
  Certificate Name: abcdefghijkl.com
    Domains: abcdefghijkl.com www.abcdefghijkl.com
    Expiry Date: 2019-01-06 01:30:19+00:00 (VALID: 29 days)
    Certificate Path: /etc/letsencrypt/live/abcdefghijkl.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/abcdefghijkl.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Renew a Certificate

Run command:

sudo certbot certonly -d <your-website>.com -d www.<your-website>.com

Note: I’m asking for both www and non-www version of certificate.

it will then ask for ways to authenticate:

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)

Simply type 2 and press Enter. It will then ask for webroot, where your index.html or index.php resides. After typing, it will confirm, and start processing your request.

If everything goes fine, following is the output:

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/xyz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/xyz.com/privkey.pem
   Your cert will expire on 2019-03-07. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

And, now if you run:

sudo certbot certificates

You can see the updated expiry date.

Caution while renew SSL certificate

If by any chance, your request failed. You should change your command to:

sudo certbot certonly -d <your-website>.com -d www.<your-website>.com --dry-run

In case, you keeps on retrying. Lets encrypt has a quota of requests that it takes from a client. It will block you for the day or more. And, you will only request after that time limit. What this option does is it will test your configuration, and if everything goes fine, it will just display message: Success. It will not replace your new certificates.

But, this surely helps identifying errors. You should also look at the log file it generates. In the output message on console, it display the logfile path.

Hope you find this post useful.

Related Posts

Jquery validate submitHandler not getting called

Jquery validate submitHandler not getting called

Code that I have is: It was: I changed it to: So, I needed to change button type…

Python Code - How To Read CSV with Headers into an Array of Dictionary

Python Code - How To Read CSV with Headers into an Array of Dictionary

Introduction Lets assume we have a csv something similar to following: Python…

Example Jenkin Groovy Pipeline Script for Building Python Projects with Git Events and Push to Artifactory

Example Jenkin Groovy Pipeline Script for Building Python Projects with Git Events and Push to Artifactory

Introduction In this post, we will see a sample Jenkin Pipeline Groovy script…

ReactJS - How to use conditionals in render JSX

ReactJS - How to use conditionals in render JSX

Introduction In this post, I will show several ways to use conditionals while…

How To Create Admin Subdomain In Cloudflare with Nginx Proxy using Docker with SSL

How To Create Admin Subdomain In Cloudflare with Nginx Proxy using Docker with SSL

Introduction I have my main website, which I run on Lets say: . Now, there is my…

Drupal 8&#58; How to Export and Import View

Drupal 8&#58; How to Export and Import View

You have created some views, and want to port it to your production environment…

Latest Posts

REST API Design: Pagination, Versioning, and Best Practices

REST API Design: Pagination, Versioning, and Best Practices

Every time two systems need to talk, someone has to design the contract between…

Efficient Data Modelling: A Practical Guide for Production Systems

Efficient Data Modelling: A Practical Guide for Production Systems

Most engineers learn data modelling backwards. They draw an ER diagram…

Deep Dive on Caching: From Browser to Database

Deep Dive on Caching: From Browser to Database

“There are only two hard things in Computer Science: cache invalidation and…

System Design Patterns for Real-Time Updates at High Traffic

System Design Patterns for Real-Time Updates at High Traffic

The previous articles in this series covered scaling reads and scaling writes…

System Design Patterns for Scaling Writes

System Design Patterns for Scaling Writes

In the companion article on scaling reads, we covered caching, replicas, and…

System Design Patterns for Managing Long-Running Tasks

System Design Patterns for Managing Long-Running Tasks

Introduction Some operations simply can’t finish in the time a user is willing…