Skip to main content

SSL Configuration

Configure HTTPS for your Apache websites using Let's Encrypt certificates.


Prerequisites

1. Domain Name

  • Must point to your server's IP address
  • DNS propagation completed

2. Apache Virtual Host

  • Virtual host already configured
  • ServerName matches your domain

1. Install Certbot

sudo apt update
sudo apt install certbot python3-certbot-apache -y

2. Obtain SSL Certificate

sudo certbot --apache -d example.com -d www.example.com

3. Auto-Renewal Setup

sudo crontab -e
# Add this line:
0 12 * * * /usr/bin/certbot renew --quiet

Manual SSL Configuration

1. Generate Private Key

sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048

2. Generate Certificate Signing Request

sudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr

3. Generate Self-Signed Certificate (for testing)

sudo openssl x509 -req -days 365 -in /etc/ssl/certs/example.com.csr -signkey /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt

4. Configure Virtual Host for SSL

sudo nano /etc/apache2/sites-available/example.com-ssl.conf
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com

SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key

ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

5. Enable SSL Module and Site

sudo a2enmod ssl
sudo a2ensite example.com-ssl.conf
sudo systemctl reload apache2

SSL Renewal

Let's Encrypt Auto-Renewal

# Test renewal
sudo certbot renew --dry-run

# Manual renewal
sudo certbot renew

Manual Certificate Renewal

# Generate new certificate
sudo openssl x509 -req -days 365 -in /etc/ssl/certs/example.com.csr -signkey /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt

# Reload Apache
sudo systemctl reload apache2

Force HTTPS Redirect

sudo nano /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>

Quick Commands

TaskCommand
Check SSL statussudo certbot certificates
Test renewalsudo certbot renew --dry-run
Manual renewalsudo certbot renew
Delete certificatesudo certbot delete --cert-name example.com
Check Apache SSLsudo apache2ctl -S (Ubuntu) / sudo apachectl -S (CentOS)

Note: Let's Encrypt certificates expire after 90 days. Auto-renewal is essential.