Konfigurieren von SSL/TLS auf Amazon Linux - Amazon Elastic Compute Cloud

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren von SSL/TLS auf Amazon Linux

Secure Sockets Layer/Transport Layer Security (SSL/TLS) erstellt einen verschlüsselten Kanal zwischen einem Webserver und einem Webclient, der Daten in der Übertragung davor schützt, abgefangen zu werden. In diesem Tutorial wird erläutert, wie Sie manuell den Support für SSL/TLS mit dem Amazon Linux-AMI und dem Apache-Webserver auf einer einzelnen EC2-Instance hinzufügen. In diesem Tutorial wird davon ausgegangen, dass Sie keinen Load Balancer verwenden. Wenn Sie Elastic Load Balancing verwenden, können Sie im Load Balancer SSL-Offload konfigurieren und stattdessen ein Zertifikat aus AWS Certificate Manager verwenden.

Aus historischen Gründen wird die Webverschlüsselung häufig einfach als SSL bezeichnet. Auch wenn Webbrowser SSL weiterhin unterstützen, ist das Nachfolgeprotokoll TLS weniger anfällig für Angriffe. Das Amazon-Linux-AMI deaktiviert standardmäßig die serverseitige Unterstützung für alle Versionen von SSL. Gremien für Sicherheitsstandards erachten TLS 1.0 als unsicher. TLS 1.0 und TLS 1.1 wurden im März 2021 formell veraltet. Dieses Tutorial enthält Empfehlungen, die ausschließlich auf der Aktivierung von TLS 1.2 basieren. TLS 1.3 wurde 2018 fertiggestellt und ist in Amazon Linux 2 verfügbar, solange die zugrunde liegende TLS-Bibliothek (in diesem Tutorial OpenSSL) unterstützt und aktiviert wird. Kunden müssen spätestens zum 28. Juni 2023 TLS 1.2 oder höher unterstützen. Weitere Informationen zum aktualisierten Verschlüsselungsstandard finden Sie unter RFC 7568 und RFC 8446.

Dieses Tutorial bezieht sich auf TLS als moderne Web-Verschlüsselung.

Wichtig

Die Verfahren sind für die Verwendung mit dem Amazon Linux-AMI gedacht. Wenn Sie versuchen, einen LAMP-Webserver auf einer Instance mit einer anderen Distribution einzurichten, funktionieren möglicherweise einige Verfahren in diesem Tutorial nicht. Informationen für Amazon Linux 2 finden Sie unter Konfigurieren von SSL/TLS auf Amazon Linux 2. Für Ubuntu lesen Sie bitte die folgende Community-Dokumentation: Open SSL auf Ubuntu. Informationen zu Red Hat Enterprise Linux finden Sie im Thema Apache-HTTP-Webserver einrichten. Andere Verteilungen finden Sie in der jeweiligen Dokumentation.

Anmerkung

Alternativ können Sie AWS Certificate Manager (ACM) für AWS Nitro-Enklaven verwenden. Dabei handelt es sich um eine Enklave-Anwendung, mit der Sie öffentliche und private SSL/TLS-Zertifikate mit Ihren Webanwendungen und Servern verwenden können, die auf Amazon EC2-Instances mit AWS Nitro Enclaves ausgeführt werden. Nitro Enclaves ist eine Amazon-EC2-Funktion, die die Erstellung isolierter Rechenumgebungen ermöglicht, um hochsensible Daten wie SSL-/TLS-Zertifikate und private Schlüssel zu schützen und sicher zu verarbeiten.

ACM for Nitro Enclaves arbeitet mit nginx zusammen, das auf Ihrer Amazon-EC2-Linux-Instance ausgeführt wird, um private Schlüssel zu erstellen, Zertifikate und private Schlüssel zu verteilen und Zertifikatverlängerungen zu verwalten.

Um ACM for Nitro Enclaves verwenden zu können, müssen Sie eine Enclave-fähige Linux-Instance nutzen.

Weitere Informationen finden Sie unter Was ist AWS Nitro Enclaves? und AWS Certificate Manager für Nitro Enclaves im AWS Nitro-Enclaves-Benutzerhandbuch.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, führen Sie die folgenden Schritte aus:

  • Starten Sie eine EBS-gestützte Instance mit dem Amazon Linux-AMI. Weitere Informationen finden Sie unter Schritt 1: Starten einer Instance.

  • Konfigurieren Sie Ihre Sicherheitsgruppe so, dass Ihre Instance Verbindungen auf den folgenden TCP-Ports akzeptieren kann:

    • SSH (Port 22)

    • HTTP (Port 80)

    • HTTPS (Port 443)

    Weitere Informationen finden Sie unter Autorisieren von eingehendem Datenverkehr für Linux-Instances.

  • Installieren Sie Apache-Webserver. step-by-step Anweisungen finden Sie unter Tutorial: Installieren eines LAMP-Webservers auf Amazon Linux. Es werden nur das http24-Paket und die zugehörigen Abhängigkeiten benötigt. Die Anleitungen mit PHP und MySQL können ignoriert werden.

  • Zur Identifizierung und Authentifizierung von Websites verwendet die TLS Public Key Infrastructure (PKI) das Domain Name System (DNS). Wenn Sie Ihre EC2-Instance zum Hosten einer öffentlichen Website verwenden möchten, müssen Sie einen Domain-Namen für Ihren Webserver registrieren oder einen vorhandenen Domain-Namen an Ihren Amazon-EC2-Host übertragen. Dafür sind zahlreiche Drittanbieterservices für die Domain-Registrierung und das DNS-Hosting verfügbar. Oder Sie verwenden Amazon Route 53.

Schritt 1: Aktivieren von TLS auf dem Server

Option: Abschließen dieses Tutorials mit Automation

Um dieses Tutorial mit AWS Systems Manager anstelle der folgenden Aufgaben abzuschließen, führen Sie das Automatisierungsdokument aus.

Dieses Verfahren führt Sie durch die Einrichtung von TLS in Amazon Linux mit einem selbstsignierten digitalen Zertifikat.

Anmerkung

Ein selbstsigniertes Zertifikat kann zu Testzwecken, jedoch nicht für die Produktion verwendet werden. Wenn Sie Ihr selbstsigniertes Zertifikat im Internet bereitstellen, erhalten die Besucher Ihrer Website Sicherheitswarnungen.

So aktivieren Sie TLS auf einem Server
  1. Verbinden Sie sich mit der Instance und stellen Sie sicher, dass Apache ausgeführt wird.

    [ec2-user ~]$ sudo service httpd status

    Starten Sie Apache, falls erforderlich.

    [ec2-user ~]$ sudo service httpd start
  2. Um sicherzustellen, dass alle Ihre Softwarepakete aktuell sind, führen Sie ein schnelles Softwareupdate auf Ihrer Instance aus. Dieser Vorgang kann einige Minuten dauern. Es ist jedoch wichtig, sicherzustellen, dass Sie über die aktuellen Sicherheitsaktualisierungen und Fehlerbehebungen verfügen.

    Anmerkung

    Mit der Option -y werden die Updates installiert, ohne um Bestätigung zu bitten. Wenn Sie die Aktualisierungen vor der Installation überprüfen möchten, können Sie diese Option auslassen.

    [ec2-user ~]$ sudo yum update -y
  3. Wenn Ihre Instance jetzt aktuell ist, fügen Sie TLS-Unterstützung hinzu, indem Sie das Apache-Modul installiere mod_ssl:

    [ec2-user ~]$ sudo yum install -y mod_ssl

    Ihre Instance verfügt nun über die folgenden Dateien, mit denen Sie Ihren sicheren Server konfigurieren und ein Zertifikat zum Testen erstellen:

    /etc/httpd/conf.d/ssl.conf

    Die Konfigurationsdatei für mod_ssl. Diese enthält „Richtlinien“, die Apache mitteilen, wo Verschlüsselungsschlüssel und Zertifikate, die zu genehmigenden TLS-Protokollversionen und die zu akzeptierenden Verschlüsselungschiffren gefunden werden können.

    /etc/pki/tls/private/localhost.key

    Ein automatisch generierter privater 2048-Bit-RSA-Schlüssel für Ihren Amazon EC2-Host. Während der Installation hat OpenSSL diesen Schlüssel zum Generieren eines selbstsignierten Hostzertifikats verwendet und Sie können diesen Schlüssel ebenfalls zum Generieren einer Zertifikatssignierungsanforderung (Certificate Signing Request, CSR) für die Übermittlung an eine Zertifizierungsstelle (Certificate Authority, CA) verwenden.

    /etc/pki/tls/certs/localhost.crt

    Ein automatisch generiertes selbstsigniertes X.509-Zertifikat für Ihren Server-Host. Dieses Zertifikat ist nützlich zum Testen, ob Apache ordnungsgemäß für die Verwendung von TLS eingerichtet ist.

    Die .key- und .crt-Dateien weisen beide das PEM-Format auf. Diese bestehen aus Base64-kodierten ASCII-Zeichen, die durch „BEGIN” und „END”-Zeilen eingerahmt werden, wie in diesem verkürzten Beispiel für ein Zertifikat dargestellt:

    -----BEGIN CERTIFICATE----- MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy ... z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0 WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak 3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg== -----END CERTIFICATE-----

    Die Dateinamen und Erweiterungen dienen der Einfachheit und haben keinerlei Auswirkungen auf die Funktion. Sie können ein Zertifikat mit cert.crt, cert.pem oder einem beliebigen anderen Dateinamen benennen, solange die zugehörige Richtlinie in der Datei ssl.conf denselben Namen verwendet.

    Anmerkung

    Wenn Sie die TLS-Standarddateien mit Ihren eigenen benutzerdefinierten Dateien ersetzen, müssen diese das PEM-Format aufweisen.

  4. Starten Sie Apache erneut.

    [ec2-user ~]$ sudo service httpd restart
  5. Ihr Apache-Webserver sollte jetzt HTTPS (sicheres HTTP) über Port 443 unterstützen. Dies können Sie testen, indem Sie die IP-Adresse oder den vollständig qualifizierten Domain-Namen Ihrer EC2-Instance mit dem Präfix https:// in einer Browser-URL-Leiste eingeben. Da Sie eine Verbindung mit einer Website mit einem selbstsignierten, nicht vertrauenswürdigen Host-Zertifikat herstellen, zeigt Ihr Browser möglicherweise eine Reihe von Sicherheitswarnungen an.

    Setzen Sie die Warnmeldungen außer Kraft und fahren Sie mit der Website fort. Wenn die Apache-Standardtestseite geöffnet wird, bedeutet dies, dass Sie TLS erfolgreich auf Ihrem Server konfiguriert haben. Alle Daten, die zwischen dem Browser und dem Server übertragen werden, sind nun sicher verschlüsselt.

    Damit den Besuchern keine Warnbildschirme angezeigt werden, müssen Sie ein Zertifikat abrufen, das nicht nur verschlüsselt, sondern Sie auch öffentlich als den Eigentümer der Website authentifiziert.

Schritt 2: Abrufen eines CA-signierten Zertifikats

Sie können das folgende Verfahren verwenden, um ein CA-signiertes Zertifikat zu erhalten:

  • Erzeugen Sie aus dem privaten Schlüssel eine Zertifikatssignierungsanforderung (Certificate Signing Request, CSR)

  • Senden Sie die CSR an eine Zertifizierungsstelle (CA)

  • Sie erhalten ein signiertes Host-Zertifikat

  • Konfigurieren Sie Apache, um das Zertifikat zu verwenden

Ein selbstsigniertes TLS-X.509-Host-Zertifikat ist kryptologisch mit einem CA-signierten Zertifikat identisch. Der Unterschied liegt im sozialen, nicht im mathematischen Bereich. Ein CA validiert mindestens die Eigentümerschaft einer Domain, bevor ein Zertifikat für einen Antragsteller ausgegeben wird. Jeder Webbrowser enthält eine Liste von CAs, die der Browseranbieter dafür als vertrauenswürdig erachtet. Ein X.509-Zertifikat besteht hauptsächlich aus einem öffentlichen Schlüssel, der Ihrem privaten Serverschlüssel entspricht, sowie einer Signatur durch die CA, die kryptografisch an den öffentlichen Schlüssel gebunden ist. Wenn ein Browser eine Verbindung mit einem Webserver über HTTPS herstellt, stellt der Server ein Zertifikat für den Browser bereit, das anhand der Liste der vertrauenswürdigen CAs überprüft wird. Wenn sich der Aussteller auf der Liste befindet oder über eine Vertrauenskette aus anderen vertrauenswürdigen Ausstellern zugänglich ist, handelt der Browser einen schnellen verschlüsselten Datenkanal mit dem Server aus und lädt die Seite.

Im Allgemeinen sind Zertifikate aufgrund der Arbeit im Zusammenhang mit der Validierung der Anforderungen kostenpflichtig, deshalb lohnt es sich, die Angebote zu vergleichen. Einige CAs bieten grundlegende Zertifikate kostenlos an. Die namhafteste dieser CAs ist das Let's Encrypt-Projekt, das auch die Automatisierung des Prozesses zur Erstellung und Verlängerung von Zertifikaten unterstützt. Weitere Informationen zur Verwendung eines Let's Encrypt-Zertifikats finden Sie unter Get Certbot.

Wenn Sie beabsichtigen, kommerzielle Dienstleistungen anzubieten, ist AWS Certificate Manager eine gute Option.

Dem Host-Zertifikat liegt der Schlüssel zugrunde. Seit 2017 empfehlen Regierungs- und Branchengruppen eine Schlüssel(-Modul)-Mindestgröße von 2048 Bits für RSA-Schlüssel, die Dokumente bis 2030 schützen sollen. Die von OpenSSL in Amazon Linux generierte Modul-Standardgröße beträgt 2048 Bits. Dies bedeutet, dass der vorhandene automatisch generierte Schlüssel für die Verwendung in CA-signierten Zertifikaten geeignet ist. Ein alternatives Verfahren wird nachstehend beschrieben. Dies ist für Personen geeignet, die einen benutzerdefinierten Schlüssel, beispielsweise einen mit einem größeren Modul oder einen anderen Verschlüsselungsalgorithmus verwenden möchten.

Diese Anweisungen zum Erwerb eines CA-signierten Host-Zertifikats funktioniert nur, wenn Sie eine registrierte und gehostete DNS-Domain besitzen.

So rufen Sie ein CA-signierten Zertifikat ab
  1. Verbinden Sie sich mit der Instance und navigieren Sie zu /etc/pki/tls/private/. Dies ist das Verzeichnis, in dem der private Schlüssel des Servers für TLS gespeichert ist. Wenn Sie lieber Ihren vorhandenen Host-Schlüssel zum Generieren der CSR verwenden möchten, fahren Sie mit Schritt 3 fort.

  2. (Optional) Generieren Sie einen neuen privaten Schlüssel. Hier sind einige Beispiele für Schlüsselkonfigurationen. Alle erstellten Schlüssel funktionieren mit Ihrem Webserver, sie unterscheiden sich jedoch darin, wie (und wie viel) Sicherheit sie implementieren.

    • Beispiel 1: Erstellen Sie einen Standard-RSA-Hostschlüssel. Bei der erstellten Datei, custom.key, handelt es sich um einen privaten 2048-Bit-RSA-Schlüssel.

      [ec2-user ~]$ sudo openssl genrsa -out custom.key
    • Beispiel 2: Erstellen Sie einen stärkeren RSA-Schlüssel mit einem größeren Modul. Bei der erstellten Datei, custom.key, handelt es sich um einen privaten 4096-Bit-RSA-Schlüssel.

      [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
    • Beispiel 3: Erstellen Sie einen 4096-Bit-verschlüsselten RSA-Schlüssel mit Passwortschutz. Die resultierende Datei, custom.key, ist ein privater 4096-Bit-RSA-Schlüssel, der mit der AES-128-Verschlüsselung verschlüsselt ist.

      Wichtig

      Die Verschlüsselung des Schlüssels bietet höhere Sicherheit. Da für einen verschlüsselten Schlüssel ein Passwort erforderlich ist, können von diesem abhängige Services jedoch nicht automatisch gestartet werden. Jedes Mal, wenn Sie diesen Schlüssel verwenden, müssen Sie das Passwort (im vorhergehenden Beispiel „abcde12345“) über eine SSH-Verbindung bereitstellen.

      [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
    • Beispiel 4: Erstellen Sie einen Schlüssel mit einer Nicht-RSA-Verschlüsselung. Die RSA-Kryptografie kann aufgrund der Größe ihrer öffentlichen Schlüssel, die auf dem Produkt aus zwei großen Primzahlen basieren, relativ langsam sein. Es ist jedoch möglich, Schlüssel für TLS zu erstellen, die andere Verschlüsselungschiffren als RSA verwenden. Schlüssel, die auf der Mathematik von Ellipsenkurven basieren, sind kleiner und bieten eine schnellere Rechenleistung bei der Bereitstellung einer gleichwertigen Sicherheitsebene.

      [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey

      Das Ergebnis ist ein privater Ellipsenkurvenschlüssel mit 256-Bit, der prime256v1 verwendet, einer „benannten Kurve“, die OpenSSL unterstützt. Die kryptografische Stärke ist hierbei laut NIST etwas höher als bei einem 2048-Bit-RSA-Schlüssel.

      Anmerkung

      Nicht alle CAs bieten den gleichen Support für elliptic-curve-based Schlüssel wie für RSA-Schlüssel.

    Stellen Sie sicher, dass der neue private Schlüssel stark einschränkende Eigentümerschaft und Berechtigungen aufweist (Eigentümer=root, Gruppe=root, Lesen/Schreiben nur für Eigentümer). Die Befehle würden folgendermaßen lauten:

    [ec2-user ~]$ sudo chown root.root custom.key [ec2-user ~]$ sudo chmod 600 custom.key [ec2-user ~]$ ls -al custom.key

    Die obigen Befehle sollten das folgende Ergebnis hervorrufen:

    -rw------- root root custom.key

    Wenn Sie einen zufriedenstellenden Schlüssel erstellt und konfiguriert haben, können Sie eine CSR erstellen.

  3. Erstellen Sie eine CSR mit Ihrem bevorzugten Schlüssel; das folgende Beispiel verwendet custom.key:

    [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem

    OpenSSL öffnet einen Dialog und fordert Sie auf, die in der folgenden Tabelle aufgeführten Informationen einzugeben. Alle Felder außer Common Name (Allgemeiner Name) sind bei einem grundlegenden, Domain-validierten Host-Zertifikat optional.

    Name Beschreibung Beispiel
    Ländername Die zweistellige ISO-Abkürzung für Ihr Land US (=United States, Vereinigte Staaten)
    State or Province Name Der Name des Bundesstaats oder der Provinz, in dem bzw. der sich Ihre Organisation befindet. Dieser Name darf nicht abgekürzt werden. Washington
    Locality Name Der Standort Ihrer Organisation, wie beispielsweise eine Stadt. Seattle
    Name der Organisation Der vollständige, offizielle Name Ihrer Organisation. Kürzen Sie den Namen Ihrer Organisation nicht ab. Beispielunternehmen
    Organizational Unit Name Zusätzliche Informationen zu Ihrer Organisation, sofern vorhanden. Beispielabteilung
    Common Name

    Dieser Wert muss genau mit der Webadresse übereinstimmen, die Ihre Benutzer in einen Browser eingeben sollen. Dies ist in der Regel ein Domain-Name mit einem vorangestellten Hostnamen oder Alias in der Form www.example.com. Bei Tests mit einem selbstsignierten Zertifikat und ohne DNS-Auflösung kann dieser allgemeine Name nur aus dem Hostnamen bestehen. CAs bieten darüber hinaus teurere Zertifikate an, die Platzhalternamen wie beispielsweise akzeptiere *.example.com.

    www.example.com
    Email Address Die E-Mail-Adresse des Serveradministrators. someone@example.com

    Zuletzt fordert OpenSSL Sie zur Eingabe eines optionalen Challenge-Passworts auf. Dieses Passwort gilt nur für die CSR und für Transaktionen zwischen Ihnen und Ihrer CA. Befolgen Sie daher die Empfehlungen Ihrer CA diesbezüglich und in Bezug auf das andere optionale Feld, den optionalen Unternehmensnamen. Das CSR-Challenge-Passwort wirkt sich nicht auf den Serverbetrieb aus.

    Die erstellte Datei csr.pem enthält Ihren öffentlichen Schlüssel, die digitale Signatur Ihres öffentlichen Schlüssels und die von Ihnen eingegebenen Metadaten.

  4. Übermitteln Sie die CSR an eine CA. Dies besteht in der Regel daraus, Ihre CSR-Datei in einem Texteditor zu öffnen und den Inhalt in ein Webformular zu kopieren. Zu diesem Zeitpunkt werden Sie möglicherweise aufgefordert, einen oder mehrere alternative „Subject”-Namen (SANs) bereitzustellen, die auf dem Zertifikat angegeben werden sollen. Wenn www.example.com der allgemeine Name ist, wäre example.com ein guter SAN und umgekehrt. Ein Besucher Ihrer Website, der einen dieser Namen eingibt, würde eine fehlerfreie Verbindung sehen. Wenn dies auf Ihrem CA-Webformular möglich ist, geben Sie den allgemeinen Namen in der Liste der SANs an. Einige CAs fügen diesen automatisch ein.

    Nachdem Ihre Anfrage genehmigt wurde, erhalten Sie ein neues, von der CA unterzeichnetes Host-Zertifikat. Möglicherweise werden Sie auch dazu aufgefordert, eine Zwischenzertifikatsdatei herunterzuladen, die zusätzliche Zertifikate enthält, welche zum Fertigstellen der Vertrauenskette der CA benötigt werden.

    Anmerkung

    Ihre CA sendet Ihnen möglicherweise Dateien in mehreren Formaten, die für verschiedene Zwecke geeignet sind. Für dieses Tutorial sollten Sie nur eine Zertifikatsdatei im PEM-Format verwenden, die in der Regel (aber nicht immer) mit der Erweiterung .pem oder .crt gekennzeichnet ist. Wenn Sie sich nicht sicher sind, welche Datei Sie verwenden sollen, öffnen Sie die Dateien mit einem Texteditor und suchen Sie die Datei, die einen oder mehrere Blöcke enthält und folgendermaßen beginnt:

    - - - - -BEGIN CERTIFICATE - - - - -

    Die Datei sollte darüber hinaus folgendermaßen enden:

    - - - -END CERTIFICATE - - - - -

    Sie können eine Datei auch wie nachfolgend beschrieben an der Befehlszeile testen:

    [ec2-user certs]$ openssl x509 -in certificate.crt -text

    Vergewissern Sie sich, dass diese Zeilen in der Datei erscheinen. Verwenden Sie keine Dateien, die mit .p7b, .p7c oder ähnlichen Dateiendungen enden.

  5. Platzieren Sie ein neues CA-signiertes Zertifikat und alle Zwischenzertifikate im /etc/pki/tls/certs-Verzeichnis.

    Anmerkung

    Es gibt mehrere Möglichkeiten, Ihren benutzerdefinierten Schlüssel in Ihre EC2-Instance hochzuladen. Der einfachste und informativste Weg ist jedoch, einen Texteditor (vi, nano oder notepad usw.) sowohl auf Ihrem lokalen Computer als auch auf Ihrer Instance zu öffnen, und dann den Dateiinhalt zwischen ihnen zu kopieren und einzufügen. Sie benötigen Root [sudo]-Berechtigungen, wenn Sie diese Operationen auf der EC2-Instance ausführen. Auf diese Weise können Sie sofort erkennen, ob es Probleme mit Berechtigungen oder mit dem Pfad gibt. Achten Sie jedoch darauf, beim Kopieren der Inhalte keine zusätzlichen Zeilen einzufügen und die Inhalte nicht zu ändern.

    Verwenden Sie die folgenden Befehle innerhalb des /etc/pki/tls/certs-Verzeichnisses, um sicherzustellen, dass die Einstellungen zu Dateibesitzer, Gruppe und Berechtigung mit den stark einschränkenden Amazon Linux-Standardwerten übereinstimmen (Besitzer=root, Gruppe=root, Lesen/Schreiben nur Besitzer).

    [ec2-user certs]$ sudo chown root.root custom.crt [ec2-user certs]$ sudo chmod 600 custom.crt [ec2-user certs]$ ls -al custom.crt

    Die obigen Befehle sollten das folgende Ergebnis hervorrufen:

    -rw------- root root custom.crt

    Die Berechtigungen für die Zwischenzertifikatsdatei sind weniger strikt (Eigentümer=root, Gruppe=root, Eigentümer kann schreiben, Gruppe kann lesen, die restliche Welt kann lesen). Die Befehle würden so lauten:

    [ec2-user certs]$ sudo chown root.root intermediate.crt [ec2-user certs]$ sudo chmod 644 intermediate.crt [ec2-user certs]$ ls -al intermediate.crt

    Die obigen Befehle sollten das folgende Ergebnis hervorrufen:

    -rw-r--r-- root root intermediate.crt
  6. Wenn Sie einen benutzerdefinierten Schlüssel zum Erstellen Ihrer CSR und des Host-Zertifikats verwendet haben, entfernen Sie den alten Schlüssel aus dem Verzeichnis /etc/pki/tls/private/ oder benennen Sie ihn und installieren Sie den neuen Schlüssel dort.

    Anmerkung

    Es gibt verschiedene Möglichkeiten, Ihren benutzerdefinierten Schlüssel auf Ihre EC2-Instance hochzuladen. Die einfachste und informativste Möglichkeit besteht jedoch darin, auf Ihrem lokalen Computer und auf Ihrer Instance einen Texteditor (vi, Nano, Notepad usw.) zu öffnen und die Dateiinhalte anschließend zwischen diesen zu kopieren und einzufügen. Sie benötigen Root [sudo]-Privilegien, wenn Sie diese Operationen auf der EC2-Instance ausführen. Auf diese Weise können Sie sofort erkennen, ob es Probleme mit Berechtigungen oder mit dem Pfad gibt. Achten Sie jedoch darauf, beim Kopieren der Inhalte keine zusätzlichen Zeilen einzufügen und die Inhalte nicht zu ändern.

    Prüfen Sie im Verzeichnis /etc/pki/tls/private, dass die Einstellungen zu Dateibesitzer, Gruppe und Berechtigung mit den stark einschränkenden Amazon Linux-Standardwerten übereinstimmen (Besitzer=root, Gruppe=root, Lesen/Schreiben nur für Besitzer). Die Befehle würden folgendermaßen lauten:

    [ec2-user private]$ sudo chown root.root custom.key [ec2-user private]$ sudo chmod 600 custom.key [ec2-user private]$ ls -al custom.key

    Die obigen Befehle sollten das folgende Ergebnis hervorrufen:

    -rw------- root root custom.key
  7. Bearbeiten Sie die Datei /etc/httpd/conf.d/ssl.conf so, dass sie Ihr neues Zertifikat und Ihre Schlüsseldateien widerspiegelt.

    1. Geben Sie den Pfad und Dateinamen des CA-signierten Host-Zertifikats im SSLCertificateFile-Verzeichnis von Apache an.

      SSLCertificateFile /etc/pki/tls/certs/custom.crt
    2. Wenn Sie eine Zwischenzertifikatsdatei erhalten haben (intermediate.crt in diesem Beispiel), stellen Sie den entsprechenden Pfad und Dateinamen über das SSLCACertificateFile-Verzeichnis in Apache bereit:

      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      Anmerkung

      Einige CAs kombinieren das Host-Zertifikat und die Zwischenzertifikate in einer einzelnen Datei, wodurch dieses Verzeichnis überflüssig wird. Informieren Sie sich in den von Ihrer CA bereitgestellten Anweisungen.

    3. Geben Sie den Pfad und Dateinamen des privaten Schlüssels in der SSLCertificateKeyFile-Richtlinie des Apache an:

      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
  8. Speichern Sie /etc/httpd/conf.d/ssl.conf und starten Sie Apache erneut.

    [ec2-user ~]$ sudo service httpd restart
  9. Testen Sie Ihren Server, indem Sie Ihren Domain-Namen in eine Browser-URL-Leiste mit dem Präfix https:// eingeben. Ihr Browser sollte die Testseite über HTTPS laden, ohne Fehler zu erzeugen.

Schritt 3: Testen und Verstärken der Sicherheitskonfiguration

Wenn Ihre TLS betriebsbereit und öffentlich zugänglich ist, sollten Sie testen, wie sicher sie wirklich ist. Dies ist ganz einfach möglich mithilfe von Online-Services wie beispielsweise Qualys SSL Labs, der eine kostenlose und gründliche Analyse Ihrer Sicherheitseinrichtung durchführt. Basierend auf den Ergebnissen entscheiden Sie sich möglicherweise dafür, die Standard-Sicherheitskonfiguration zu verstärken, indem Sie kontrollieren, welche Protokolle akzeptiert werden sollen, welche Chiffren Sie bevorzugen und welche ausgeschlossen werden soll. Um weitere Informationen zu erhalten, sehen Sie sich an, wie Qualys seine Skalen gestaltet.

Wichtig

Reale Tests sind außerordentlich wichtig für die Sicherheit Ihres Servers. Kleine Konfigurationsfehler führen möglicherweise zu ernsten Sicherheitsverstößen und Datenverlusten. Da sich die empfohlenen Sicherheitsmaßnahmen aufgrund von Forschungen und neuartigen Bedrohungen ständig ändern, sind regelmäßige Sicherheitsprüfungen wichtig für eine gute Serveradministration.

Geben Sie auf der Website von Qualys SSL Labs den vollständigen Domain-Namen Ihres Servers ein, in der Form www.example.com. Nach ungefähr zwei Minuten erhalten Sie eine Note (von A bis F) für Ihre Website sowie eine detaillierte Auflistung der Ergebnisse. Obwohl die Übersicht zeigt, dass die Konfiguration meist intakt ist, weist der detaillierte Bericht auf mehrere mögliche Probleme hin. Beispiel:

Die RC4-Chiffre kann von bestimmten älteren Browsern verwendet werden. Eine Chiffre ist der mathematische Kern eines Verschlüsselungsalgorithmus. RC4, eine schnelle Chiffre zur Verschlüsselung von TLS-Daten-Streams, ist für gravierende Schwachstellen bekannt. Wenn Sie nicht sehr gute Gründe haben, veraltete Browser zu unterstützen, sollten Sie dies deaktivieren.

Alte TLS-Versionen werden unterstützt. Die Konfiguration unterstützt TLS 1.0 (bereits veraltet) und TLS 1.1 (demnächst veraltet). Seit 2018 wurde nur TLS 1.2 empfohlen.

So korrigieren Sie die TLS-Konfiguration
  1. Öffnen Sie die Konfigurationsdatei /etc/httpd/conf.d/ssl.conf in einem Texteditor und kommentieren Sie die folgenden Zeilen aus, indem Sie am Anfang jeweils "#" eingeben:

    #SSLProtocol all -SSLv3 #SSLProxyProtocol all -SSLv3
  2. Fügen Sie die folgenden Richtlinien hinzu:

    SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 SSLProxyProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2

    Diese Richtlinien deaktivieren die SSL-Versionen 2 und 3 explizit sowie auch die TLS-Versionen 1.0 und 1.1. Der Server akzeptiert jetzt keine verschlüsselten Verbindungen mit Clients, die eine andere Version als TLS 1.2 verwenden. Der Verbose-Wortlaut in der Richtlinie teilt einem menschlichen Leser genauer mit, wofür der Server konfiguriert ist.

    Anmerkung

    Durch eine solche Deaktivierung der TLS-Versionen 1.0 und 1.1 wird ein kleiner Prozentsatz von veralteten Webbrowsern daran gehindert, auf Ihre Website zuzugreifen.

So ändern Sie die Liste der zulässigen Chiffren
  1. Öffnen Sie die Konfigurationsdatei /etc/httpd/conf.d/ssl.conf und suchen Sie den Abschnitt mit auskommentierten Beispiel für die Konfiguration von SSLCipherSuite und SSLProxyCipherSuite.

    #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 #SSLProxyCipherSuite HIGH:MEDIUM:!aNULL:!MD5

    Lassen Sie diese so, wie sie sind, und fügen Sie darunter die folgenden Richtlinien hinzu:

    Anmerkung

    Obwohl dies hier zur besseren Lesbarkeit auf mehrere Zeilen verteilt ist, müssen die beiden Richtlinien jeweils in einer einzelnen Zeile ohne Leerstellen zwischen den Chiffrenamen aufgeführt werden.

    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES:!aNULL:!eNULL:!EXPORT:!DES: !RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLProxyCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES:!aNULL:!eNULL:!EXPORT:!DES: !RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

    Diese Chiffren sind eine Teilmenge der viel längeren Liste von unterstützten Chiffren in OpenSSL. Sie wurden anhand der folgenden Kriterien ausgewählt und angeordnet:

    • Unterstützung für Forward Secrecy

    • Stärke

    • Geschwindigkeit

    • Spezifische Chiffren vor Chiffrefamilien

    • Zulässige Chiffren vor verbotenen Chiffren

    Hochrangige Chiffren haben ECDHE in ihrem Namen, für Elliptic Curve Diffie-Hellman Ephemeral. Ephemeral weist hierbei auf Forward Secrecy hin. Darüber hinaus gehört RC4 jetzt zu den verbotenen Chiffren nahe dem Ende.

    Wir empfehlen, eine explizite Liste von Chiffren zu verwenden, anstatt auf Standards oder Terse-Richtlinien zu vertrauen, deren Inhalte nicht sichtbar sind. Die hier gezeigte Chiffreliste ist nur eine von vielen möglichen Listen. Beispielsweise möchten Sie vielleicht eine Liste eher für die Geschwindigkeit als für Forward Secrecy optimieren.

    Wenn Sie davon ausgehen, dass Sie ältere Clients unterstützen müssen, können Sie die Chiffre-Suite DES-CBC3-SHA zulassen.

    Jede Aktualisierung von OpenSSL führt neue Chiffren ein und stuft ältere als veraltet ein. Halten Sie Ihre Amazon Linux-EC2-Instance immer auf dem neuesten Stand, achten Sie auf Sicherheitsankündigungen von OpenSSL sowie auf Berichte zu neuen Sicherheitslücken in der Fachpresse.

  2. Entfernen Sie das Kommentarzeichen der folgenden Zeile, indem Sie das „#” löschen:

    #SSLHonorCipherOrder on

    Dieser Befehl zwingt den Server, hochrangige Chiffren zu bevorzugen, einschließlich derjenigen (in diesem Fall), die Forward Secrecy unterstützen. Wenn diese Richtlinie aktiviert ist, versucht der Server, eine hochgradig sichere Verbindung herzustellen, bevor er auf Chiffren mit geringerer Sicherheit zurückgreift.

  3. Starten Sie Apache erneut. Wenn Sie die Domain auf Qualys SSL Labs erneut testen, sollten Sie sehen, dass die Schwachstelle in Bezug auf RC4 nicht mehr vorhanden ist und dass die Übersicht in etwa wie folgt aussieht.

Fehlerbehebung

  • Mein Apache-Webserver startet erst, wenn ich ein Passwort eingebe

    Dieses Verhalten wird erwartet, wenn Sie einen verschlüsselten, passwortgeschützten privaten Serverschlüssel installiert haben.

    Sie können die Verschlüsselungs- und Passwortanforderung vom Schlüssel entfernen. Angenommen, Sie haben einen privaten verschlüsselten RSA-Schlüssel namens custom.key im Standardverzeichnis und das Passwort darauf ist abcde12345, dann führen Sie die folgenden Befehle auf Ihrer EC2-Instance aus, um eine unverschlüsselte Version des Schlüssels zu erzeugen.

    [ec2-user ~]$ cd /etc/pki/tls/private/ [ec2-user private]$ sudo cp custom.key custom.key.bak [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt [ec2-user private]$ sudo mv custom.key.nocrypt custom.key [ec2-user private]$ sudo chown root.root custom.key [ec2-user private]$ sudo chmod 600 custom.key [ec2-user private]$ sudo service httpd restart

    Apache sollte jetzt starten, ohne Sie zur Eingabe eines Passworts aufzufordern.