One place for hosting & domains

      selbstsignierten

      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:

      Installieren Sie dann das Paket apache2:

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

      • 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:

      Starten Sie Apache neu, um das Modul zu aktivieren:

      • 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:

      • 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:

      • 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:

      • sudo mkdir /var/www/your_domain_or_ip

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

      • 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:

      • sudo a2ensite your_domain_or_ip.conf

      Als Nächstes testen wir auf Konfigurationsfehler:

      • 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:

      • 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:

      • 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:

      • 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:

      • sudo apachectl configtest
      • 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.



      Source link