Tutorial

Erstellen eines selbstsignierten SSL-Zertifikats für Apache unter Ubuntu 20.04

Published on August 20, 2020
Deutsch
Erstellen eines selbstsignierten SSL-Zertifikats für Apache unter Ubuntu 20.04

Einführung

TLS oder „Transport Layer Security“ – und sein Vorgänger SSL – sind Protokolle, mit denen normaler Datenverkehr in einer geschützten, verschlüsselten Hülle eingeschlossen wird. Mithilfe dieser Technologie können Server sicher Informationen an ihre Clients senden, ohne dass ihre Nachrichten von einer externen Partei abgefangen oder gelesen werden.

In diesem Leitfaden zeigen wir Ihnen, wie Sie ein selbstsigniertes SSL-Zertifikat mit dem Apache-Webserver unter Ubuntu 20.04 erstellen und verwenden können.

Hinweis: Ein selbstsigniertes Zertifikat verschlüsselt die Kommunikation zwischen Ihrem Server und jedem Client. Da es jedoch nicht von einer der vertrauenswürdigen Zertifizierungsstellen signiert ist, die in Webbrowsern und Betriebssystemen enthalten sind, können Benutzer das Zertifikat nicht verwenden, um die Identität Ihres Servers automatisch zu überprüfen. Dadurch sehen Ihre Benutzer beim Besuch Ihrer Website einen Sicherheitsfehler.

Aufgrund dieser Einschränkung sind selbstsignierte Zertifikate nicht für eine Produktionsumgebung geeignet, die der Öffentlichkeit dient. Sie werden normalerweise zum Testen oder zum Sichern nicht kritischer Dienste verwendet, die von einem einzelnen Benutzer oder einer kleinen Gruppe von Benutzern verwendet werden und über alternative Kommunikationskanäle Vertrauen in die Gültigkeit des Zertifikats herstellen können.

Eine produktionsfähigere Zertifikatlösung finden Sie unter Let’s Encrypt, einer kostenlosen Zertifizierungsstelle. Informationen zum Herunterladen und Konfigurieren eines Let’s Encrypt-Zertifikats finden Sie in unserem Tutorial Sichern von Apache mit Let’s Encrypt unter Ubuntu 20.04.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, benötigen Sie Folgendes:

  • Zugriff auf einen Ubuntu 20.04-Server mit einem sudofähigen Nicht- root-Benutzer. In unserem Leitfaden zur Ersteinrichtung des Servers mit Ubuntu 20.04 erfahren Sie, wie Sie dieses Konto erstellen.
  • Außerdem müssen Sie Apache installiert haben. Sie können Apache mit apt installieren. Aktualisieren Sie zunächst den lokalen Paketindex, um die neuesten Upstream-Änderungen widerzuspiegeln:
  1. sudo apt update

Installieren Sie dann das Paket apache2:

  1. sudo apt install apache2

Wenn Sie eine ufw-Firewall eingerichtet haben, öffnen Sie die Ports http und https:

  1. sudo ufw allow "Apache Full"

Stellen Sie nach Fertigstellung dieser Schritte sicher, dass Sie als Nicht-root-Benutzer angemeldet sind und fahren Sie mit dem Tutorial fort.

Schritt 1 — Aktivieren von mod_ssl

Bevor wir jegliche SSL-Zertifikate verwenden können, müssen wir zunächst mod_ssl, ein Apache-Modul zur Unterstützung von SSL-Verschlüsselung, aktivieren.

Aktivieren Sie mod_ssl mit dem Befehl a2enmod:

  1. sudo a2enmod ssl

Starten Sie Apache neu, um das Modul zu aktivieren:

  1. sudo systemctl restart apache2

Das Modul mod_ssl ist jetzt aktiviert und einsatzbereit.

Schritt 2 – Erstellen des SSL-Zertifikats

Nachdem Apache zur Verschlüsselung bereit ist, können wir nun mit der Erstellung eines neuen SSL-Zertifikats fortfahren. Das Zertifikat speichert einige grundlegende Informationen zu Ihrer Website und wird von einer Schlüsseldatei begleitet, mit der der Server verschlüsselte Daten sicher verarbeiten kann.

Wir können den SSL-Schlüssel und die Zertifikatdateien mit dem Befehl openssl erstellen:

  1. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Nachdem Sie den Befehl eingegeben haben, werden Sie zu einer Eingabeaufforderung weitergeleitet, in der Sie Informationen zu Ihrer Website eingeben können. Bevor wir dazu kommen, werfen wir einen Blick darauf, was in dem von uns ausgegebenen Befehl geschieht:

  • openssl: Dies ist das Befehlszeilentool zum Erstellen und Verwalten von OpenSSL-Zertifikaten, Schlüsseln und anderen Dateien.
  • req -x509: Dies gibt an, dass wir die CSR-Verwaltung (X.509 Certificate Signing Request) verwenden möchten. X.509 ist ein Infrastrukturstandard für öffentliche Schlüssel, den SSL und TLS für die Schlüssel- und Zertifikatverwaltung einhalten.
  • -nodes: Dies weist OpenSSL an, die Option zum Sichern unseres Zertifikats mit einer Passphrase zu überspringen. Wir wollen, dass Apache die Datei beim Starten des Servers ohne Benutzer-Eingriff lesen kann. Eine Passphrase würde dies verhindern, da wir sie nach jedem Neustart eingeben müssten.
  • -days 365: Diese Option legt fest, wie lange das Zertifikat als gültig angesehen wird. Wir haben sie hier auf ein Jahr festgesetzt. Viele moderne Browser lehnen Zertifikate ab, die länger als ein Jahr gültig sind.
  • -newkey rsa:2048: Dies gibt an, dass wir gleichzeitig ein neues Zertifikat und einen neuen Schlüssel generieren möchten. Wir haben in einem vorherigen Schritt nicht den Schlüssel erstellt, der zum Signieren des Zertifikats erforderlich ist. Daher müssen wir ihn zusammen mit dem Zertifikat erstellen. Der Teil rsa:2048 weist ihn an, einen RSA-Schlüssel mit einer Länge von 2048 Bit zu erstellen.
  • -keyout: Diese Zeile teilt OpenSSL mit, wo die generierte private Schlüsseldatei, die wir erstellen, abgelegt werden soll.
  • -out: Dadurch wird OpenSSL mitgeteilt, wo das von uns erstellte Zertifikat abgelegt werden soll.

Füllen Sie die Eingabeaufforderungen angemessen aus. Die wichtigste Zeile ist die, die den allgemeinen Namen anfragt. Sie müssen entweder den Hostnamen eingeben, über den Sie auf den Server zugreifen, oder die öffentliche IP-Adresse des Servers. Es ist wichtig, dass dieses Feld mit dem übereinstimmt, was Sie in die Adressleiste Ihres Browsers einfügen, um auf die Website zuzugreifen, da eine Nichtübereinstimmung mehr Sicherheitsfehler verursacht.

Die vollständige Liste der Eingabeaufforderungen sieht ungefähr so aus:

Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example 
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
Email Address []:webmaster@example.com

Beide von Ihnen erstellten Dateien werden in den entsprechenden Unterverzeichnissen unter /etc/ssl abgelegt.

Als Nächstes aktualisieren wir unsere Apache-Konfiguration, um das neue Zertifikat und den neuen Schlüssel zu verwenden.

Schritt 3 – Konfigurieren von Apache zur Verwendung von SSL

Nachdem wir unser selbstsigniertes Zertifikat und unseren Schlüssel zur Verfügung haben, müssen wir unsere Apache-Konfiguration aktualisieren, um sie verwenden zu können. Unter Ubuntu können Sie neue Apache-Konfigurationsdateien (sie müssen mit .conf enden) in /etc/apache2/sites-available/ ablegen. Diese werden beim nächsten Neuladen oder Neustart des Apache-Prozesses geladen.

Für dieses Tutorial erstellen wir eine neue minimale Konfigurationsdatei. (Wenn Sie bereits einen Apache <Virtualhost> eingerichtet haben und nur SSL hinzufügen müssen, müssen Sie wahrscheinlich die Konfigurationszeilen kopieren, die mit SSL beginnen, und den VirtualHost-Port von 80 auf 443 umschalten. Wir werden uns um Port 80 im nächsten Schritt kümmern.)

Öffnen Sie eine neue Datei im Verzeichnis /etc/apache2/sites-available:

  1. sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

Fügen Sie die folgende minimale VirtualHost-Konfiguration ein:

/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:443>
   ServerName your_domain_or_ip
   DocumentRoot /var/www/your_domain_or_ip

   SSLEngine on
   SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

Stellen Sie sicher, dass Sie die Zeile ServerName so aktualisieren, wie Sie Ihren Server ansprechen möchten. Dies kann ein Hostname, ein vollständiger Domänenname oder eine IP-Adresse sein. Stellen Sie sicher, dass alles, was Sie auswählen, mit dem allgemeinen Namen übereinstimmt, den Sie bei der Erstellung des Zertifikats ausgewählt haben.

In den verbleibenden Zeilen wird ein DocumentRoot-Verzeichnis angegeben, aus dem Dateien bereitgestellt werden sollen, sowie die SSL-Optionen, die erforderlich sind, um Apache auf unser neu erstelltes Zertifikat und unseren neu erstellten Schlüssel zu verweisen.

Jetzt erstellen wir unseren DocumentRoot und fügen eine HTML-Datei nur zu Testzwecken ein:

  1. sudo mkdir /var/www/your_domain_or_ip

Öffnen Sie eine neue index.html-Datei mit Ihrem Texteditor:

  1. sudo nano /var/www/your_domain_or_ip/index.html

Fügen Sie Folgendes in die leere Datei ein:

/var/www/your_domain_or_ip/index.html
<h1>it worked!</h1>

Dies ist natürlich keine vollständige HTML-Datei, aber die Browser sind nachsichtig und es wird ausreichen, um unsere Konfiguration zu überprüfen.

Speichern und schließen Sie die Datei. Als Nächstes müssen wir die Konfigurationsdatei mit dem Tool a2ensite aktivieren:

  1. sudo a2ensite your_domain_or_ip.conf

Als Nächstes testen wir auf Konfigurationsfehler:

  1. sudo apache2ctl configtest

Wenn alles erfolgreich ist, erhalten Sie ein Ergebnis, das so aussieht:

Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

Die erste Zeile enthält eine Meldung, dass die ServerName-Direktive nicht global festgelegt ist. Wenn Sie diese Meldung entfernen möchten, können Sie den ServerName auf den Domänennamen oder die IP-Adresse Ihres Servers in /etc/apache2/apache2.conf festlegen. Dies ist optional, da die Meldung keinen Schaden anrichtet.

Wenn Ihre Ausgabe Syntax OK enthält, enthält Ihre Konfigurationsdatei keine Syntaxfehler. Wir können Apache sicher neu laden, um unsere Änderungen zu implementieren:

  1. sudo systemctl reload apache2

Laden Sie Ihre Website nun in einem Browser und verwenden Sie https:// am Anfang.

Sie sollten einen Fehler sehen. Dies ist normal für ein selbstsigniertes Zertifikat! Der Browser warnt Sie, dass er die Identität des Servers nicht überprüfen kann, da unser Zertifikat von keiner seiner bekannten Zertifizierungsstellen signiert ist. Zu Testzwecken und für den persönlichen Gebrauch kann dies in Ordnung sein. Sie sollten in der Lage sein, sich durch erweitert oder weitere Informationen zu klicken und fortzufahren.

Danach lädt Ihr Browser die Meldung it worked! („es hat funktioniert!“ ).

Hinweis:  Wenn Ihr Browser überhaupt keine Verbindung zum Server herstellt, stellen Sie sicher, dass Ihre Verbindung nicht durch eine Firewall blockiert wird. Wenn Sie ufw verwenden, öffnen die folgenden Befehle die Ports 80 und 443:

  1. sudo ufw allow "Apache Full"

Als Nächstes fügen wir unserer Konfiguration einen weiteren VirtualHost-Abschnitt hinzu, um einfache HTTP-Anforderungen zu bearbeiten und an HTTPS umzuleiten.

Schritt 4 – Umleiten von HTTP zu HTTPS

Derzeit reagiert unsere Konfiguration nur auf HTTPS-Anforderungen an Port 443. Es wird empfohlen, auch auf Port 80 zu antworten, selbst wenn Sie die Verschlüsselung des gesamten Datenverkehrs erzwingen möchten. Richten Sie einen VirtualHost ein, um auf diese unverschlüsselten Anforderungen zu antworten und sie an HTTPS umzuleiten.

Öffnen Sie dieselbe Apache-Konfigurationsdatei, die wir in den vorherigen Schritten gestartet haben:

  1. sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

Erstellen Sie unten einen weiteren VirtualHost-Block, der den Anforderungen an Port 80 entspricht. Verwenden Sie die Direktive ServerName, um Ihren Domänennamen oder Ihre IP-Adresse erneut abzugleichen. Verwenden Sie dann Redirect, um alle Anforderungen abzugleichen und an den SSL VirtualHost zu senden. Stellen Sie sicher, dass der nachfolgende Schrägstrich eingefügt wird:

/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:80>
	ServerName your_domain_or_ip
	Redirect / https://your_domain_or_ip/
</VirtualHost>

Speichern und schließen Sie diese Datei, wenn Sie fertig sind, und testen Sie dann Ihre Konfigurationssyntax erneut und laden Sie Apache neu:

  1. sudo apachectl configtest
  2. sudo systemctl reload apache2

Sie können die neue Weiterleitungsfunktion testen, indem Sie Ihre Website mit einem einfachen http:// vor der Adresse besuchen. Sie sollten automatisch zu https:// umgeleitet werden.

Zusammenfassung

Sie haben Apache jetzt so konfiguriert, dass verschlüsselte Anforderungen mithilfe eines selbstsignierten SSL-Zertifikats bereitgestellt und unverschlüsselte HTTP-Anforderungen an HTTPS umgeleitet werden.

Wenn Sie SSL für eine öffentliche Website verwenden möchten, sollten Sie einen Domänennamen erwerben und eine weit verbreitete Zertifizierungsstelle wie Let’s Encrypt verwenden.

Weitere Informationen zur Verwendung von Let’s Encrypt mit Apache finden Sie in unserem Tutorial Sichern von Apache mit Let’s Encrypt unter Ubuntu 20.04.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Senior Manager, DevEd

Open source advocate and lover of education, culture, and community.



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.