security

How to Secure your Website with a Free SSL Certificate from Let's Encrypt

Mario Dian Jan 25, 2017 4 min read

HTTP has massive privacy issues designed into the protocol that allows attackers to eavesdropand hijack your content.

Implications of these attacks may go from none to very serious like stealing your identity and even money.

In an effort to encrypt the Web, EFF (Electronic Frontier Foundation) and a certificate authority Let's Encrypt have published free tools to allow web owners easily implement HTTPS by default.

In this tutorial, we'll be setting up a certificate for Apache running on Linux over SSH.

The setup process is very easy so I'll include installation steps for most favorite Linux distributions. However, you shouldn't have any problems following these steps on any UNIX-like operating system.

Install Apache Plugin

First, we need to install the apache plugin.

Find the right commands for your Linux distribution.

Ubuntu:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install python-certbot-apache

Debian Jessy:

Gentoo:

emerge --sync
emerge --update --deep --with-bdeps=y @world
emerge -av app-crypt/certbot-apache

Updating Gentoo takes a lot of time because new packages need to be built from source. If you don't want to update your whole system avoid running first 2 commands.

Fedora:

sudo dnf upgrade
sudo dnf install python-certbot-apache

RHEL/Cent OS:

sudo yum update && sudo yum upgrade
sudo yum install python-certbot-apache

Other UNIX-like systems (let's call this method "alternative"):

mkdir ~/certbot
cd ~/certbot
wget https://dl.eff.org/certbot-autochmod a+x certbot-auto
sudo ./certbot-auto

In a case of using the alternative method, later on, make sure to run certbot-auto with an absolute path.

Find the path:

Possible paths could be:

/usr/bin/certbot-auto
/usr/local/bin/certbot-auto

We'll be using /usr/bin/certbot-auto in this tutorial.

Setup Apache Plugin

Depending on your operating system you will have to use one of 3 commands: letsencrypt, certbotor certbot-auto

For the purpose of this tutorial, we will use letsencrypt.

Since parameters are the same for each of the command, simply change letsencrypt to certbot or /usr/bin/certbot-auto when applicable.

Automatic Setup (Method 1)

The apache plugin automates all of the tasks of setting up SSL for your websites.

If you feel like setting it up manually, please skip this step and move to the method 2 instead.

sudo letsencrypt --apache

Manual Setup (Method 2)

Let's say our web server runs 3 websites for which we want to setup SSL: freedomnode.com, mariodian.com, segwit.freedomnode.com

We will need to obtain and install certificates for each of them separately.

sudo letsencrypt --apache -d freedomnode.com -d mariodian.com -d segwit.freedomnode.com

Test

After installing certificates for your website using either method, open your browser, go to https://yourdomain.com and click the lock icon next to the URL.

You'll be shown details of the certificate such as its issuing authority (Lets' Encrypt) and expiry date.

If you can't load the website or your browser gives you a "can't verify identity" error you may need to restart your web server.

On most Linux distributions running the following should do the trick:

sudo service apache2 restart

If the above command doesn't work, try running:

sudo /etc/init.d/apache2 restart

If an error occurs you may need to change apache2 to httpd for above commands.

As a last resort, run:

uname -a

and copy and paste it to the comments section below. I'll send you the right commands based on your Linux distribution.

Automatic SSL Renewal

Let's Encrypt issues SSL certificates for 90 days only.

They need to be renewed before the expiry date otherwise our websites will stop being accessible via https.

Let's test whether our certificates can automatically be renewed first:

sudo letsencrypt renew --dry-run --agree-tos

If you get "Registering without email!" error your certificates can still be automatically renewed. Simply ignore the message and move on to the next step.

Open crontab (as root) for editing:

sudo crontab -e

add the following command:

30 2 * * * . /root/.profile; /usr/bin/letsencrypt renew >> /var/log/letsencrypt/letsencrypt.log

save your changes and exit the editor.

The above line tells cron to execute our command every morning at 2:30am. However, it will only renew our certificates when they are about to expire.

Following the EEFs recommendation, you may want to run it twice a day instead. Let's run at 6:30am and 6:30pm then:

30 6,18 * * *

You could enhance the Cron job by telling the script to restart apache after certificates were renewed by adding --post-hook "service apache2 restart":

30 6,18 * * * . /root/.profile; /usr/bin/letsencrypt renew --post-hook "service apache2 restart" >> /var/log/letsencrypt/letsencrypt.log

Certificate Revocation

In case you made a mistake setting up a certificate or you just no longer want to use it, you may revoke it:

sudo letsencrypt revoke -d freedomnode.com --cert-path /etc/letsencrypt/live/freedomnode.com/cert.pem

Please note that the certificate path and name may differ. Edit it according to your environment.

After the certificate is revoked, your website will no longer be accessible via https.


I hope you find this tutorial useful. Please share it with your friends that haven't secured their websites yet. There's no excuse to leave your users unprotected.

In case you run into any problems, shoot me a comment below and I'll get back to you ASAP.

Found this valuable?

Please consider supporting us. Thank you!

Support us
WRITTEN BY

Mario Dian

I'm an Anarchist, Rothbardian, Bitcoiner and Travel Hacker. Also founder of @freedomnodecom.

Show comments