Secure your Lightsail WordPress instance with free Let's Encrypt SSL certificates
Tip
Amazon Lightsail offers a guided workflow that automates the installation and configuration of a Let's Encrypt certificate on your WordPress instance. We highly recommend that you use the workflow instead of following the manual steps in this tutorial. For more information, see Launch and configure a WordPress instance.
Lightsail makes it easy to secure your websites and applications with SSL/TLS using Lightsail load balancers. However, using a Lightsail load balancer might not generally be the right choice. Perhaps your site doesn't need the scalability or fault tolerance that load balancers provide, or maybe you're optimizing for cost. In the latter case, you might consider using Let's Encrypt to obtain a free SSL certificate. If so, that's no problem. You can integrate those certificates with Lightsail instances.
With this guide, you'll learn how to request a Let’s Encrypt wildcard certificate using Certbot, and integrate it with your WordPress instance using the Really Simple SSL plugin.
-
The Linux distribution used by Bitnami instances changed from Ubuntu to Debian in July, 2020. Because of this change, some of the steps in this tutorial will differ depending on the Linux distribution of your instance. All Bitnami blueprint instances created after the change use the Debian Linux distribution. Instances created before the change will continue to use the Ubuntu Linux distribution. To check the distribution of your instance, run the
uname -a
command. The response will show either Ubuntu or Debian as your instance's Linux distribution. -
Bitnami has modified the file structure for many of their stacks. The file paths in this tutorial may change depending on whether your Bitnami stack uses native Linux system packages (Approach A), or if it is a self-contained installation (Approach B). To identify your Bitnami installation type and which approach to follow, run the following command:
test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."
Contents
Before getting started
You should consider the following before getting started with this tutorial:
Use the Bitnami HTTPS configuration (bncert
) tool
instead
The steps outlined in this tutorial show you how to implement an SSL/TLS certificate using
a manual process. However, Bitnami offers a more automated process that uses the Bitnami HTTPS
configuration (bncert
) tool that is typically pre-installed on WordPress
instances in Lightsail. We highly recommend that you use that tool instead of following the
manual steps in this tutorial. This tutorial was written before the bncert
tool
became available. For more information about using the bncert
tool, see Enabling HTTPS on your WordPress
instance in Amazon Lightsail.
Identify the Linux distribution of your WordPress instance
The Linux distribution used by Bitnami instances changed from Ubuntu to Debian in July,
2020. All Bitnami blueprint instances created after the change use the Debian Linux
distribution. Instances created before the change will continue to use the Ubuntu Linux
distribution. Because of this change, some of the steps in this tutorial will differ depending
on the Linux distribution of your instance. You must identify the Linux distribution of your
instance so that you know which steps in this tutorial to use. To identify the Linux
distribution of your instance, run the uname -a
command. The response will show
either Ubuntu or Debian as your instance's Linux distribution.
Identify the tutorial approach that applies to your instance
Bitnami is in the process of modifying the file structure for many of their stacks. The file paths in this tutorial may change depending on whether your Bitnami stack uses native Linux system packages (Approach A), or if it is a self-contained installation (Approach B). To identify your Bitnami installation type and which approach to follow, run the following command:
test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A:
Using system packages." || echo "Approach B: Self-contained
installation."
Step 1: Complete the prerequisites
Complete the following prerequisites if you haven’t already done so:
-
Create a WordPress instance in Lightsail. To learn more, see Create an instance.
-
Register a domain name, and get administrative access to edit its DNS records. To learn more, see DNS.
We recommend that you manage your domain’s DNS records using a Lightsail DNS zone. To learn more, see Create a DNS zone to manage your domain’s DNS records.
-
Use the browser-based SSH terminal in the Lightsail console to perform the steps in this tutorial. However, you can also use your own SSH client, such as PuTTY. To learn more about configuring PuTTY, see Download and set up PuTTY to connect using SSH in Amazon Lightsail.
After you've completed the prerequisites, continue to the next section of this tutorial.
Step 2: Install Certbot on your Lightsail instance
Certbot is a client used to request a certificate from Let’s Encrypt and deploy it to a web server. Let's Encrypt uses the ACME protocol to issue certificates, and Certbot is an ACME-enabled client that interacts with Let's Encrypt.
To install Certbot on your Lightsail instance
-
Sign in to the Lightsail console
. -
On the Lightsail home page, choose the SSH quick connect icon for the instance that you want to connect to.
-
After your Lightsail browser-based SSH session is connected, enter the following command to update the packages on your instance:
sudo apt-get update
-
Enter the following command to install the software properties package. Certbot’s developers use a Personal Package Archive (PPA) to distribute Certbot. The software properties package makes it more efficient to work with PPAs.
sudo apt-get install software-properties-common
Note
If you encounter a
Could not get lock
error when running thesudo apt-get install
command, please wait approximately 15 minutes and try again. This error may be caused by a cron job that is using the Apt package management tool to install unattended upgrades. -
Enter the following commands to install the GPG package, and add Certbot to the local apt repository:
Note
Step 5 applies only to instances that use the Ubuntu Linux distribution. Skip this step if your instance uses the Debian Linux distribution.
sudo apt-get install gpg -y
sudo apt-add-repository ppa:certbot/certbot -y
-
Enter the following command to update apt to include the new repository:
sudo apt-get update -y
-
Enter the following command to install Certbot:
sudo apt-get install certbot -y
Certbot is now installed on your Lightsail instance.
-
Keep the browser-based SSH terminal window open—you return to it later in this tutorial. Continue to the next section of this tutorial.
Step 3: Request a Let’s Encrypt SSL wildcard certificate
Begin the process of requesting a certificate from Let’s Encrypt. Using Certbot, request a
wildcard certificate, which lets you use a single certificate for a domain and its subdomains.
For example, a single wildcard certificate works for the example.com
top-level
domain, and the blog.example.com
, and stuff.example.com
subdomains.
To request a Let’s Encrypt SSL wildcard certificate
-
In the same browser-based SSH terminal window used in step 2 of this tutorial, enter the following commands to set an environment variable for your domain. You can now more efficiently copy and paste commands to obtain the certificate. Be sure to replace
with the name of your registered domain.domain
DOMAIN=
domain
WILDCARD=*.$DOMAIN
Example:
DOMAIN=
example.com
WILDCARD=*.$DOMAIN
-
Enter the following command to confirm the variables return the correct values:
echo $DOMAIN && echo $WILDCARD
You should see a result similar to the following:
-
Enter the following command to start Certbot in interactive mode. This command tells Certbot to use a manual authorization method with DNS challenges to verify domain ownership. It requests a wildcard certificate for your top-level domain, as well as its subdomains.
sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
-
Enter your email address when prompted, because it’s used for renewal and security notices.
-
Read the Let’s Encrypt terms of service. When done, press A if you agree. If you disagree, you cannot obtain a Let’s Encrypt certificate.
-
Respond accordingly to the prompt to share your email address and to the warning about your IP address being logged.
-
Let’s Encrypt now prompts you to verify that you own the domain specified. You do this by adding TXT records to the DNS records for your domain. A set of TXT record values are provided as shown in the following example:
Note
Let's Encrypt may provide a single or multiple TXT records that you must use for verification. In this example, we were provided with two TXT records to use for verification.
-
Keep the Lightsail browser-based SSH session open—you return to it later in this tutorial. Continue to the next section of this tutorial.
Step 4: Add TXT records to your domain’s DNS zone
Adding a TXT record to your domain’s DNS zone verifies that you own the domain. For demonstration purposes, we use the Lightsail DNS zone. However, the steps might be similar for other DNS zones typically hosted by domain registrars.
Note
To learn more about how to create a Lightsail DNS zone for your domain, see Creating a DNS zone to manage your domain’s DNS records in Lightsail.
To add TXT records to your domain’s DNS zone in Lightsail
-
On the Lightsail home page, choose the Domains & DNS tab.
-
Under the DNS zones section of the page, choose the DNS Zone for the domain that you specified in the Certbot certificate request.
-
In the DNS zone editor, choose DNS records.
-
Choose Add record.
-
In the Record type drop-down menu, choose TXT record.
-
Enter the values specified by the Let’s Encrypt certificate request into the Record name and Responds with fields.
Note
The Lightsail console pre-populates the apex portion of your domain. For example, if you want to add the
subdomain, then you only have to enter_acme-challenge.example.com
into the text box, and Lightsail adds the_acme-challenge
.example.com
portion for you when you save the record. -
Choose Save.
-
Repeat steps 4 through 7 to add the second set of TXT records specified by the Let’s Encrypt certificate request.
-
Keep the Lightsail console browser window open—you return to it later in this tutorial. Continue to the next section of this tutorial.
Step 5: Confirm that the TXT records have propagated
Use the MxToolbox utility to confirm that the TXT records have propagated to the Internet’s DNS. DNS record propagation might take a while depending on your DNS hosting provider, and the configured time to live (TTL) for your DNS records. It is important that you complete this step, and confirm that your TXT records have propagated, before continuing your Certbot certificate request. Otherwise, your certificate request fails.
To confirm the TXT records have propagated to the Internet’s DNS
-
Open a new browser window and go to https://mxtoolbox.com/TXTLookup.aspx
. -
Enter the following text into the text box. Be sure to replace
with your domain.domain
_acme-challenge.
domain
Example:
_acme-challenge.
example.com
-
Choose TXT Lookup to run the check.
-
One of the following responses occurs:
-
If your TXT records have propagated to the Internet’s DNS, you see a response similar to the one shown in the following screenshot. Close the browser window and continue to the next section of this tutorial.
-
If your TXT records have not propagated to the Internet’s DNS, you see a DNS Record not found response. Confirm that you added the correct DNS records to your domains’ DNS zone. If you added the correct records, wait a while longer to let your domain’s DNS records propagate, and run the TXT lookup again.
-
Step 6: Complete the Let’s Encrypt SSL certificate request
Go back to the Lightsail browser-based SSH session for your WordPress instance and complete the Let’s Encrypt certificate request. Certbot saves your SSL certificate, chain, and key files to a specific directory on your WordPress instance.
To complete the Let’s Encrypt SSL certificate request
-
In the Lightsail browser-based SSH session for your WordPress instance, press Enter to continue your Let’s Encrypt SSL certificate request. If successful, a response similar to the one shown in the following screenshot appears:
The message confirms that your certificate, chain, and key files are stored in the
/etc/letsencrypt/live/
directory. Make sure to replacedomain
/
with your domain, such asdomain
/etc/letsencrypt/live/
.example.com
/ -
Make note of the expiration date specified in the message. You use it to renew your certificate by that date.
-
Now that you have the Let’s Encrypt SSL certificate, continue to the next section of this tutorial.
Step 7: Create links to the Let’s Encrypt certificate files in the Apache server directory
Create links to the Let’s Encrypt SSL certificate files in the Apache server directory on your WordPress instance. Also, back up your existing certificates, in case you need them later.
To create links to the Let’s Encrypt certificate files in the Apache server directory
-
In the Lightsail browser-based SSH session for your WordPress instance, enter the following command to stop the underlying services:
sudo /opt/bitnami/ctlscript.sh stop
You should see a response similar to the following:
-
Enter the following command to set an environment variable for your domain. You can more efficiently copy and paste commands to link the certificate files. Be sure to replace
with the name of your registered domain name.domain
DOMAIN=
domain
Example:
DOMAIN=
example.com
-
Enter the following command to confirm the variables return the correct values:
echo $DOMAIN
You should see a result similar to the following:
-
Enter the following commands individually to rename your existing certificate files as backups. Refer to the Important block at the beginning of this tutorial for information about the different distributions and file structures.
-
For Debian Linux distributions
Approach A (Bitnami installations using system packages):
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old
Approach B (Self-contained Bitnami installations):
sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
-
For older instances that use the Ubuntu Linux distribution:
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.crt /opt/bitnami/apache/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.key /opt/bitnami/apache/conf/bitnami/certs/server.key.old
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.csr /opt/bitnami/apache/conf/bitnami/certs/server.csr.old
-
-
Enter the following commands individually to create links to your Let’s Encrypt certificate files in the Apache directory. Refer to the Important block at the beginning of this tutorial for information about the different distributions and file structures.
-
For Debian Linux distributions
Approach A (Bitnami installations using system packages):
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache2/conf/bitnami/certs/server.key
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache2/conf/bitnami/certs/server.crt
Approach B (Self-contained Bitnami installations):
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache2/conf/server.key
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache2/conf/server.crt
-
For older instances that use the Ubuntu Linux distribution:
sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache/conf/bitnami/certs/server.key
sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache/conf/bitnami/certs/server.crt
-
-
Enter the following command to start the underlying services that you had stopped earlier:
sudo /opt/bitnami/ctlscript.sh start
You should see a result similar to the following:
The SSL certificate files for your WordPress instance are now in the correct directory.
-
Continue to the next section of this tutorial.
Step 8: Integrate the SSL certificate with your WordPress site using the Really Simple SSL plug-in
Install the Really Simple SSL plug-in to your WordPress site, and use it to integrate the SSL certificate. Really Simple SSL also configures HTTP to HTTPS redirection to ensure that users who visit your site are always on the HTTPS connection.
To integrate the SSL certificate with your WordPress site using the Really Simple SSL plug-in
-
In the Lightsail browser-based SSH session for your WordPress instance, enter the following command to set your
wp-config.php
andhtaccess.conf
files to be writeable. The Really Simple SSL plug-in will write to the wp-config.php file to configure your certificates.-
For newer instances that use the Debian Linux distribution:
sudo chmod 666 /opt/bitnami/wordpress/wp-config.php && sudo chmod 666 /opt/bitnami/apache/conf/vhosts/htaccess/wordpress-htaccess.conf
-
For older instances that use the Ubuntu Linux distribution:
sudo chmod 666 /opt/bitnami/apps/wordpress/htdocs/wp-config.php && sudo chmod 666 /opt/bitnami/apps/wordpress/conf/htaccess.conf
-
-
Open a new browser window and sign in to the administration dashboard of your WordPress instance.
Note
For more information, see Getting the application user name and password for your Bitnami instance in Amazon Lightsail.
-
Choose Plugins from the left navigation pane.
-
Choose Add New from the top of the Plugins page.
-
Search for Really Simple SSL.
-
Choose Install Now next to the Really Simple SSL plug-in in the search results.
-
After it’s done installing, choose Activate.
-
In the prompt that appears, choose Go ahead, activate SSL! You may be redirected to the sign in page for the administration dashboard of your WordPress instance.
Your WordPress instance is now configured to use SSL encryption. Additionally, your WordPress instance is now configured to automatically redirect connections from HTTP to HTTPS. When a visitor goes to
http://example.com
, they are automatically redirected to the encrypted HTTPS connection (i.e.,https://example.com
).
Step 9: Renew the Let's Encrypt certificates every 90 days
Let’s Encrypt certificates are valid for 90 days. Certificates can be renewed 30 days before they expire. To renew the Let's Encrypt certificates, run the original command used to obtain them. Repeat the steps in the Request a Let’s Encrypt SSL wildcard certificate section of this tutorial.