Ubuntu – HTTPS auf Apache aktivieren

Veröffentlicht von

Hier wird erklärt, wie man HTTPS auf dem Apache-Server aktiviert und ein selbstsigniertes Zertifikat erstellt.

  • Ubuntu 20.04
  • Apache/2.4.41 (Ubuntu)
# openssl installieren
sudo apt-get update
sudo apt-get install -y openssl

# Apache-Module aktivieren
sudo a2enmod ssl
sudo a2enmod rewrite

# Apache-Konfigurationsdatei anpassen
sudo nano /etc/apache2/apache2.conf

# An das Ende der apache2.conf Datei einfügen
<Directory /var/www/html>
    AllowOverride All
</Directory>

# Ordner, privaten Schlüssel und Websitezertifikat mit dem Befehl OpenSSL erstellen
sudo mkdir /etc/apache2/certificate
cd /etc/apache2/certificate
sudo openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out apache-certificate.crt -keyout apache.key

# HTTPS und Zertifikat einbinden
sudo nano /etc/apache2/sites-enabled/000-default.conf

# Es gibt 2 Va­ri­an­ten
# 1. Va­ri­an­te - der Benutzer kann HTTP und HTTPS nutzen, dann muss in der Datei das hier stehen
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
        SSLCertificateKeyFile /etc/apache2/certificate/apache.key
</VirtualHost>

# 2. Va­ri­an­te - der Benutzer wird immer auf HTTPS umgeleitet, dann muss in der Datei das hier stehen
<VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</virtualhost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
        SSLCertificateKeyFile /etc/apache2/certificate/apache.key
</VirtualHost>

# Apache-Server neu starten
sudo service apache2 restartCode-Sprache: PHP (php)

Express-Setup: Alle Befehle im Überblick

Ich gehe davon aus, das der apache2 Server schon installiert ist, jetzt installieren wir noch „openssl“

sudo apt-get update
sudo apt-get install -y opensslCode-Sprache: JavaScript (javascript)

als nächstes aktivieren wir die Apache-Module “ Mod_ssl“ und “ Mod_rewrite“

sudo a2enmod ssl
sudo a2enmod rewrite

und jetzt müssen wir noch in der Apache-Konfigurationsdatei „AllowOverride“ anpassen, damit „rewrite“ funktioniert, dazu öffnen wir die Datei „apache2.conf“

sudo nano /etc/apache2/apache2.conf

und fügen folgende Zeilen am Ende dieser Datei hinzu

<Directory /var/www/html>
    AllowOverride All
</Directory>Code-Sprache: HTML, XML (xml)

jetzt erstellen wir ein Ordner, einen privaten Schlüssel und das Websitezertifikat mit dem Befehl OpenSSL

sudo mkdir /etc/apache2/certificate
cd /etc/apache2/certificate
sudo openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out apache-certificate.crt -keyout apache.keyCode-Sprache: JavaScript (javascript)

das Zertifikat benötigt noch ein paar Informationen

Generating a RSA private key
............++++
.......................................................++++
writing new private key to 'apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Bonn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Musterfirma
Organizational Unit Name (eg, section) []:Abteilung IT
Common Name (e.g. server FQDN or YOUR name) []:musterfirma.de
Email Address []:office@musterfirma.deCode-Sprache: PHP (php)

bei der Option COMMON_NAME müssen wir die IP-Adresse oder den Hostnamen eingeben

jetzt müssen wir noch dem Apache-Server sagen, was er zu tun hat, wenn es eine HTTP oder HTTPS Anfrage gibt, da gibt es zwei Möglichkeiten, als erstes öffnen wir die Datei

sudo nano /etc/apache2/sites-enabled/000-default.confCode-Sprache: JavaScript (javascript)

1 – der Benutzer kann HTTP und HTTPS nutzen, dann muss in der Datei das hier stehen

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
        SSLCertificateKeyFile /etc/apache2/certificate/apache.key
</VirtualHost>Code-Sprache: HTML, XML (xml)

2 – der Benutzer wird immer auf HTTPS umgeleitet, dann muss in der Datei das hier stehen

<VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</virtualhost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
        SSLCertificateKeyFile /etc/apache2/certificate/apache.key
</VirtualHost>Code-Sprache: HTML, XML (xml)

als letztes starten wir den Apache-Server neu und rufen danach die Website auf

sudo service apache2 restart