Recently I wrote a guide on how to deploy your first web application using apache2 on ubuntu 18.04
Today I will guide you through how to secure your application with free SSL certificate, that means your application will only be accessible via https and not http. I assume you have already deployed your application as described in the previous blog post.
Here are a couple of reasons why you need to secure your site with SSL
We will use LetsEncrypt which is a is a free, automated, and open certificate authority. To easily get the certificate configured, we will use Certbot which is a free, open source software tool for automatically using Let’s Encrypt certificates on manually-administrated websites to enable HTTP.
If you are using another web server or different OS, go to Certbot site and select your configuration and you will be provided with the commands to run. This guide uses apache on ubuntu 18.04 configuration.
Add the Certbot PPA to your list of repositories
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
Install Certbot
sudo apt-get install certbot python3-certbot-apache
Get and install your certificates
Run this command to get a certificate and have Certbot edit your Apache configuration automatically to serve it, turning on HTTPS access in a single step.
sudo certbot --apache
Follow through the prompts that are presented during the setup. One important prompt to take note of is: Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. Choose the second option 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites.
This will make sure that all the users trying to access the site from insecure url http://myexampledomain.com will be directed to the secure url https://myexampledomain.com
Test automatic renewal
The Certbot packages on your system come with a cron job or systemd timer that will renew your certificates automatically before they expire. You will not need to run Certbot again, unless you change your configuration. You can test automatic renewal for your certificates by running this command:
sudo certbot renew –dry-run
Following the steps above, one major thing happened, a new file is created at /etc/apache2/sites-available/myexampledomain.com-le-ssl.conf . Below are the files content;
<IfModule mod_ssl.c>
<VirtualHost *:443>
#ServerAdmin: The email address of the admin
# ServerName: specifies what hostname must appear in the request's Host: header to match this virtual host.
#ServerAlias: A name that should match as a basename
#DocumentRoot: Directory containing the application files
ServerAdmin [email protected]
ServerName myexampledomain.com
ServerAlias www.myexampledomain.com
DocumentRoot /var/www/myexampledomain.com
#Custom error log files. Renaming them like this helps you identify errors ifyou have a probllem loading your web app.
ErrorLog ${APACHE_LOG_DIR}/myexampledomain_error.log
CustomLog ${APACHE_LOG_DIR}/myexampledomain_access.log combined
SSLCertificateFile /etc/letsencrypt/live/myexampledomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/myexampledomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Also the original /etc/apache2/sites-available/myexampledomain.com.conf was edited at the bottom to include force re-direction to secured url with the following content.
RewriteEngine on
RewriteCond %{SERVER_NAME} =myexampledomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
After the above step, visit your site on the browser myexampledomain.com you should see a secure lock on your tab. When you click on it and then select certificate, you will see the certificate was issued by Let's Encrypt. If you don’t see that, try the accessing the url on an incognito window or clear your browser cache.
Next go to SSLABS and test how well you have configured your server. A grade will be awarded for your configuration. The goal is to get the highest grade possible meaning your configuration is correct. One very common error that you may come across is;
myexampledomain.com redirected you too many times, ERR_TOO_MANY_REDIRECTS
Here is how to solve it:
If you are using cloudflare, go to the SSL/TLS tab and change the setting from whatever it is to Your SSL/TLS encryption mode is Full (strict) option.
If the error persists, check inside the newly created ssl file _/etc/apache2/sites-available/myexampledomain.com-le-ssl.conf _and make sure you do not have any re-direct command inside the file.
With this configuration I got a rating of** B **by ssllabs mainly because of support low protocols.
If you want to try and improve the grade you can use this blog to get an understanding on the configurations to do.
This will include selecting a strong SSL cipher suite as well as disabling all old and unsafe protocols less than TLS 1.2.
The steps on getting an A or A+ rating will be in my next blog, so stay tuned.
To make a comment you have to login
0 Comments