Durch das Konfigurieren einer SSL-Verbindung (Secure Sockets Layer) können Sie dem allgemeinen HTTP ein zusätzliches asymmetrisches Verschlüsselungsprotokoll hinzufügen. Das SSL-Protokoll kann nützlich sein, um entweder das Authentifizierungssystem einer Website oder den Datenaustausch zwischen einer App und dem Server zu stärken. In dieser Anleitung erfahren Sie, wie Sie eine SSL-Verbindung konfigurieren und HTTPS auf Apache mit Ubuntu 18.04 aktivieren.
Verbinden Sie sich zunächst über eine SSH-Verbindung mit Ihrem Server. Wenn Sie dies noch nicht getan haben, wird empfohlen, unserer Anleitung zu folgen, um sich sicher mit dem SSH-Protokoll zu verbinden. Im Falle eines lokalen Servers gehen Sie zum nächsten Schritt und öffnen Sie das Terminal Ihres Servers.
Ein SSL-Zertifikat erhalten
Um eine sichere Verbindung herzustellen, benötigt Apache ein SSL-Zertifikat, das von einer Zertifizierungsstelle (CA) bezogen werden kann. Der Einfachheit halber verwenden wir in diesem Beispiel ein selbstsigniertes oder selbstsigniertes Zertifikat, das nur in Test- und Entwicklungsumgebungen verwendet wird. Um ein selbstsigniertes Zertifikat zu erhalten, lesen Sie unsere Anleitung zum Erstellen eines selbstsignierten SSL-Zertifikats.
Falls Sie daran interessiert sind, ein kostenloses, von einer Zertifizierungsstelle ausgestelltes SSL-Zertifikat zu erhalten, folgen Sie unserem Leitfaden zur Sicherung von Apache mit Let's Encrypt und Ubuntu 18.04 .
Wichtiger Hinweis:
Geben Sie während der Erstellung des Zertifikats die IP-Adresse und/oder den Domänennamen Ihres Servers ein, wenn Sie nach dem Common Name gefragt werden:
Common Name (e.g. server FQDN or YOUR name) []: domain.com
Erstellen Sie nach Erhalt des Zertifikats den Ordner /etc/certificate:
$ sudo mkdir /etc/certificate
Speichern Sie dann sowohl das Zertifikat als auch den privaten Schlüssel darin.
Konfigurieren der Apache SSL-Parameter
Fahren Sie fort, indem Sie die Anweisungen für die sichere Verbindung festlegen, die Apache erstellen wird. Erstellen Sie dazu die Datei ssl-params.conf im Verzeichnis Apache conf-available:
$ sudo nano /etc/apache2/conf-available/ssl-params.conf
Fügen Sie die folgende Grundkonfiguration in die neu erstellte Datei ein:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
Dann speichern und schließen Sie die Datei.
So ändern Sie den virtuellen Host
Ändern Sie dann die SSL-Konfiguration des virtuellen Hosts der Domain, die Sie mit einer SSL-Verbindung schützen möchten. In diesem Tutorial wird als Beispiel die SSL-Konfiguration des standardmäßigen Apache Virtual Host verwendet.
Öffnen Sie die Virtual Host SSL-Konfiguration:
$ sudo nano /etc/apache2/sites-available/default-ssl.conf
Sie finden eine Datei, die wie folgt aufgebaut ist:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Richten Sie die ServerAdmin-Anweisung korrekt ein, indem Sie Ihre E-Mail-Adresse eingeben und die ServerName-Anweisung gefolgt von Ihrer Domain oder der IP-Adresse Ihres Servers hinzufügen.
Ändern Sie schließlich den Pfad, der von den Direktiven SSLCertificateFile und SSLCertificateKeyFile angegeben wird, indem Sie jeweils den Pfad Ihres Zertifikats und Ihres privaten Schlüssels eingeben .
Sie erhalten ein Ergebnis ähnlich dem Folgenden:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName mydomain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certificate/certificate.crt
SSLCertificateKeyFile /etc/certificate/private.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Dann speichern und schließen Sie die Datei.
Wie man die Firewall konfiguriert
Falls eine Firewall auf Ihrem System vorhanden ist, richten Sie diese so ein, dass HTTP-Verkehr und HTTPS-Verkehr zu Ihrem Computer zugelassen werden.
Bei Verwendung der UFW-Firewall sind einige vorinstallierte Profile für Apache verfügbar. Sehen wir uns also an, wie man sie aktiviert.
Führen Sie diesen Befehl aus, um die verfügbaren Profile zu überprüfen, die in der UFW-Firewall installiert sind:
$ sudo ufw app list
Eine Liste ähnlich der folgenden wird auf dem Bildschirm angezeigt:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Um HTTP- (Port 80) und HTTPS- (Port 443) Datenverkehr zuzulassen, verwenden Sie das Profil "Apache Full".
Überprüfen Sie die Profilinformationen wie folgt:
$ sudo ufw app info "Apache Full"
Die Beschreibung des Bildschirmprofils wird angezeigt:
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
Nachdem Sie das Profil verifiziert haben, aktivieren Sie es:
$ sudo ufw allow in "Apache Full"
Wie man Apache konfiguriert
An dieser Stelle können Änderungen an der Apache-Konfiguration vorgenommen werden.
Aktiviere die Module mod_ssl und mod_headers:
$ sudo a2enmod ssl
$ sudo a2enmod headers
Lesen der zuvor erstellten SSL-Konfiguration aktivieren:
$ sudo a2enconf ssl-params
Aktivieren Sie den standardmäßigen virtuellen SSL-Host:
$ sudo a2ensite default-ssl
Überprüfen Sie, dass Sie keine Syntaxfehler in den Apache-Konfigurationsdateien gemacht haben:
$ sudo apache2ctl configtest
Wenn die Meldung "Syntax OK" auf dem Bildschirm erscheint, starten Sie Apache neu:
$ sudo systemctl restart apache2
So überprüfen Sie die sichere Verbindung
Öffnen Sie Ihren Browser, indem Sie sich mit der Domain oder IP-Adresse des von Ihnen konfigurierten virtuellen Hosts verbinden, und stellen Sie sicher, dass Sie das https-Protokoll verwenden
https://mydomain.com