GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Aktivieren Sie HTTPS auf Apache ordnungsgemäß mit Let’s Encrypt auf Ubuntu

Dieses Tutorial zeigt Ihnen, wie Sie HTTPS auf Apache mit Let’s Encrypt auf Ubuntu richtig aktivieren. Google Chrome und Firefox haben bereits damit begonnen, unverschlüsselte Webseiten mit Passworteingabefeld als unsicher zu markieren. Schließlich werden alle HTTP-Webseiten als unsicher markiert. HTTPS wird zum Standard für jede Website. Es ist auch eine Voraussetzung, wenn Sie das HTTP/2-Protokoll verwenden möchten, um Ihre Website zu beschleunigen.

Wie Sie vielleicht wissen, ist Let’s Encrypt eine kostenlose, automatisierte und offene Zertifizierungsstelle. Die offizielle Dokumentation beschreibt einfache Schritte, die Sie befolgen können, um HTTPS mit Let’s Encrypt zu aktivieren, aber es steckt noch mehr dahinter. Wenn Sie dem offiziellen Dokument folgen, erhalten Sie die Punktzahl A auf SSL Labs-Test. Wenn Sie meinen Schritten folgen, erhalten Sie eine A+-Punktzahl . Wenn Sie bereits ein Let’s Encrypt-Zertifikat bereitgestellt haben, können Sie trotzdem diesem Tutorial folgen, um Ihr vorhandenes Zertifikat zu erneuern und zu ersetzen.

Bevor ich Ihnen die Schritte zum Aktivieren von HTTPS mit Let’s Encrypt zeige, möchte ich zuerst über den CAA-Eintrag sprechen Sicherheitsheader und OCSP-Heftung . Diese Dinge können Ihnen dabei helfen, A+ zu bekommen. Ich werde Ihnen am Ende dieses Tutorials auch zeigen, wie Sie mit dem CloudFlare CDN-Dienst umgehen.

Hinweis:Dieses Tutorial funktioniert auf allen aktuellen Versionen von Apache und Ubuntu (einschließlich 16.04, 18.04 und 20.04).

CAA-Eintrag für Ihren Domainnamen erstellen

Certificate Authority Authorization (CAA) ist ein DNS-Ressourceneintrag, der angibt, welche Zertifizierungsstellen (CAs) Zertifikate für einen bestimmten Domänennamen ausstellen dürfen. Ab September 2017 sind alle CAs verpflichtet, CAA-Einträge zu überprüfen, bevor sie ein Zertifikat für einen bestimmten Domainnamen ausstellen. Wenn für einen Domänennamen kein CAA-Eintrag gefunden wird, kann jede Zertifizierungsstelle ein Zertifikat für diesen Domänennamen ausstellen. Wenn in Ihrem CAA-Eintrag keine Zertifizierungsstelle aufgeführt ist, kann diese Zertifizierungsstelle kein Zertifikat für Ihren Domänennamen ausstellen.

Um einen CAA-Eintrag zu erstellen, der es Let’s Encrypt ermöglicht, ein Zertifikat für Ihren Domainnamen auszustellen, fügen Sie den folgenden Eintrag in Ihrem DNS-Server oder DNS-Manager hinzu.

example.com. IN CAA 0 issue "letsencrypt.org"

Sie können auch iodef verwenden um CA dazu zu bringen, böswillige Zertifikatsausgabeanfragen an Ihre E-Mail-Adresse zu melden.

example.com. IN CAA 0 iodef "mailto:your-email-address"

Das Format der obigen Datensätze ist für Zonendateien. Nachfolgend finden Sie einige Tipps für Sie.

  • Sie können den SSLMate CAA Record Helper verwenden, um einen CCA-Eintrag für Ihren Domainnamen zu generieren.
  • Wenn Sie GoDaddy DNS verwenden, folgen Sie diesem Beitrag, um einen CAA-Eintrag hinzuzufügen.

Sie können den folgenden dig-Befehl verwenden, um Ihren CAA-Eintrag zu überprüfen.

dig example.com CAA

Beachten Sie, dass Webbrowser keine CAA-Einträge prüfen.

Sicherheits-Header

Sicherheitskopfzeilen sind genauso wichtig wie HTTPS, aber nur ein kleiner Prozentsatz der HTTPS-fähigen Sites beachtet Sicherheitskopfzeilen. Während eine vollständige Diskussion über Sicherheitsheader den Rahmen dieses Tutorials sprengen würde, möchte ich über die upgrade-insecure-requests sprechen und HSTS Header, weil Sie sie einfach mit Let’s Encrypt aktivieren können, um die Sicherheit Ihrer Website zu erhöhen.

Unsichere Anfragen aktualisieren

Es gibt Zeiten, in denen eine Website HTTPS aktiviert hat, aber einige CSS, Bilder oder JavaScripts werden immer noch über HTTP bereitgestellt. In diesem Fall verschwindet das grüne Vorhängeschloss am Anfang der Adressleiste des Browsers. In Google Chrome wird es durch ein Info-Symbol ersetzt; In Firefox wird es durch ein graues Vorhängeschloss mit einem gelben Dreieck ersetzt. Sie sollten Website-Besuchern so oft wie möglich ein grünes Vorhängeschloss zeigen, und die einfache Möglichkeit, dieses Problem zu beheben, besteht darin, Upgrade-insecure-requests zu aktivieren -Header, der den Webbrowser dazu zwingt, https:// zu verwenden für jedes http:// Ressource.

Um diesen Header zu aktivieren, fügen Sie einfach --uir hinzu Flag beim Ausstellen von certbot Befehl. Beachten Sie, dass dieser Header für Ressourcen funktioniert, die in Ihrer eigenen Domäne gehostet werden, und für Ressourcen in Domänen von Drittanbietern, die HTTPS unterstützen. Wenn Ihre Webseite Ressourcen auf Servern von Drittanbietern enthält, die nicht über HTTPS verfügbar sind, werden diese Ressourcen von Webbrowsern blockiert, aber die Verwendung dieses Headers stellt sicher, dass Ihre Webseiten immer ein grünes Vorhängeschloss erhalten.

HSTS (HTTP Strict Transport Security)

Der HSTS-Header teilt Webbrowsern mit, dass die gesamte Kommunikation mit Ihrer Website über HTTPS erfolgen sollte. Es verteidigt sich gegen SSL-Striping, bei dem es sich um einen Angriff zum Downgrade von HTTPS auf HTTP handelt. Um diesen Header zu aktivieren, fügen Sie einfach --hsts hinzu Flag beim Ausstellen von certbot Befehl.

OCSP-Heften

Wenn sich ein Webbrowser mit einer HTTPS-Website verbindet, sendet er eine OCSP-Anfrage (Online Certificate Status Protocol) an die Zertifizierungsstelle (CA), um den Sperrstatus des SSL-Zertifikats der Website abzufragen. Laut Firefox-Telemetriedaten kann dies das Laden der Seite um 1–3 Sekunden verzögern.

Um die Leistung zu verbessern, kann der Websitebesitzer das OCSP-Stapling aktivieren. In diesem Fall ruft der Webserver selbst die von CA signierte OCSP-Antwort in regelmäßigen Abständen ab und sendet sie an den Webbrowser, sodass der Webbrowser den OCSP-Server nicht mehr kontaktieren muss.

Um das OCSP-Heften zu aktivieren, fügen Sie einfach --staple-ocsp hinzu Flag beim Ausstellen von certbot Befehl.

OCSP muss geheftet werden

Wenn ein Hacker eine gefälschte, duplizierte Website erstellt, OCSP-Stapel deaktiviert und auch den Zugriff des Webbrowsers auf den OCSP-Server blockiert, geht der Webbrowser davon aus, dass alles in Ordnung ist, und fährt mit der bösartigen Website fort. Um dieses Problem zu lösen, können Sie OCSP Must Staple auf Ihrer Website aktivieren, wodurch Webbrowsern mitgeteilt wird, dass Ihre Website während einer HTTPS-Verbindung eine OCSP-Stapelantwort präsentieren muss. Wenn also Webbrowser eine Verbindung zu einer gefälschten Website ohne OCSP-Stack herstellen, wird die Verbindung unterbrochen.

Um OCSP muss geheftet zu aktivieren, fügen Sie --must-staple hinzu Flag beim Ausstellen von certbot Befehl.

Installieren von Let’s Encrypt Client (Certbot) auf Ubuntu

Jetzt ist es an der Zeit, sich die Hände schmutzig zu machen. Ab Ubuntu 16.04 ist der Let’s Encrypt-Client (Certbot) im Ubuntu-Repository enthalten, sodass Sie ihn mit dem folgenden Befehl installieren können. Python3-certbot-apache ist das Certbot Apache-Plugin.

sudo apt install certbot python3-certbot-apache

Um die Versionsnummer zu prüfen, führen Sie

aus
certbot --version

Beispielausgabe:

certbot 0.31.0

Wenn Sie die neueste Version verwenden möchten, können Sie Certbot aus dem Snap-Store installieren.

sudo apt install snapd

sudo snap install --classic certbot

Hinweis :Wenn Sie die Snap-Version verwenden möchten, müssen Sie den vollständigen Binärpfad verwenden:/snap/bin/certbot .

Verwenden des Apache-Plugins zum Aktivieren von HTTPS

Wenn Ihre Website keinen CDN-Dienst verwendet, wird empfohlen, das Apache-Plugin zu verwenden, um HTTPS auf dem Apache-Webserver zu aktivieren, da es automatisch ein SSL/TLS-Zertifikat erhalten und für Sie konfigurieren kann. Führen Sie den folgenden Befehl auf Ihrem Ubuntu-Server aus.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

Erklärung:

  • --apache :Apache Authenticator und Installer verwenden
  • --agree-tos :Nutzungsbedingungen von Let’s Encrypt akzeptieren
  • --redirect :Den gesamten HTTP-Datenverkehr automatisch auf HTTPS umleiten
  • --uir :Fügen Sie den Header „Content-Security-Policy:upgrade-insecure-requests“ zu jeder HTTP-Antwort hinzu.
  • --hsts :Strict-Transport-Security-Header zu jeder HTTP-Antwort hinzufügen.
  • --staple-ocsp :Aktiviert OCSP-Heften.
  • --must-staple :Fügt dem Zertifikat die Erweiterung OCSP Must Staple hinzu.
  • -d Flag folgt eine durch Kommas getrennte Liste von Domänennamen. Sie können bis zu 100 Domainnamen hinzufügen.
  • --email :E-Mail, die für die Registrierung und den Wiederherstellungskontakt verwendet wird.

Sie werden gefragt, ob Sie E-Mails von EFF (Electronic Frontier Foundation) erhalten möchten. Nachdem Sie J oder N ausgewählt haben, wird Ihr SSL-Zertifikat automatisch bezogen und für Sie konfiguriert, was durch die folgende Meldung angezeigt wird.

Wenn Sie jetzt Ihre Website besuchen, können Sie sehen, dass HTTP automatisch auf eine HTTPS-Verbindung umgeleitet wird. Bitte beachten Sie, dass der certbot-Client /etc/apache2/sites-enabled/example.com-le-ssl.conf erstellt Virtueller SSL-Host beim Konfigurieren von SSL für Ihre Website.

Testen Sie Ihr SSL-Zertifikat

Gehen Sie zu ssllabs.com, um Ihr SSL-Zertifikat und Ihre Konfiguration zu testen. Wie ich versprochen habe, bekommst du A+ . Sie können auch überprüfen, ob Ihr Domainname einen CAA-Eintrag aktiviert hat, ob Ihr Server HSTS, OCSP-Stapeln und OCSP-Stapeln aktiviert hat.

Umleitung von WWW auf Nicht-WWW (oder umgekehrt)

Wir haben die Umleitung von HTTP auf HTTPS bereits aktiviert, was noch zu tun ist, ist die Umleitung von www auf nicht-www oder umgekehrt. Wenn Sie WordPress verwenden, dann ist es sehr einfach. Gehen Sie einfach zum WordPress Dashboard> Einstellungen> Allgemeines und legen Sie Ihre bevorzugte Version (www oder nicht-www) in der WordPress-Adresse fest und Site-Adresse .

Wenn Sie diesen Weg gehen, erhalten Sie am Ende eine sogenannte doppelte 301-Weiterleitung. Zuerst leitet der Apache-Server HTTP zu HTTPS um, dann leitet WordPress zur www- oder Nicht-www-Domain um.

Einige mögen argumentieren, dass Sie SEO-Linkjuice verlieren können, wenn Sie eine doppelte 301-Weiterleitung durchführen. Wenn Sie sich darüber Sorgen machen, können Sie die folgende Methode verwenden, um alle Domänenversionen direkt zum endgültigen Ziel zu bringen.

Bearbeiten Sie Ihre virtuelle Hostdatei. (Nicht der virtuelle SSL-Host)

sudo nano /etc/apache2/sites-enabled/example.com.conf

Der CertBot-Client hat der Datei die folgenden Zeilen hinzugefügt, um HTTP auf HTTPS umzuleiten.

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Um auf www- oder Nicht-www-Domänen umzuleiten, müssen Sie die letzte Zeile ändern. Ersetzen Sie %{SERVER_NAME} mit Ihrer bevorzugten Domain-Version wie unten. (www-Domäne)

RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Wenn Sie eine Nicht-www-Domain bevorzugen, ändern Sie sie wie folgt.

RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Anschließend speichern und schließen Sie die Datei. Außerdem müssen wir den virtuellen SSL-Host bearbeiten.

sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf

Fügen Sie die folgenden Zeilen über dem schließenden -Tag hinzu, um Nicht-www auf die www-Domain umzuleiten.

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Wenn Sie www zu einer Nicht-www-Domain umleiten möchten, fügen Sie stattdessen die folgenden Zeilen hinzu.

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Speichern und schließen Sie die Datei. Laden Sie den Apache-Dienst neu, damit die Änderungen wirksam werden.

sudo systemctl reload apache2

Um es deutlicher zu machen, ist unten ein Screenshot meiner virtuellen Apache-Hostdatei und meiner virtuellen SSL-Hostdatei zum Umleiten von Nicht-www- zu www-Domains.

Apache Virtual Host-Datei

Virtuelle Apache-SSL-Hostdatei

Wenn Sie WordPress verwenden, stellen Sie sicher, dass Sie Ihre bevorzugte Domain-Version in WoredPress-Adresse festlegen und Site-Adresse bevor Sie virtuelle Apache-Hostdateien bearbeiten. Wenn die WordPress-Einstellungen der Apache-Konfiguration widersprechen, befindet sich Ihre Website in einer Umleitungsschleife.

So deaktivieren Sie TLSv1 und TLSv1.1

TLSv1 und TLSv1.1 gelten nicht mehr als sicher. Um sie zu deaktivieren, bearbeiten Sie die Konfigurationsdatei mit den SSL-Optionen von Let’s Encrypt.

sudo nano /etc/letsencrypt/options-ssl-apache.conf

Suchen Sie die folgende Zeile, die SSLv2 und SSLv3 standardmäßig deaktiviert.

SSLProtocol             all -SSLv2 -SSLv3

Ändern Sie es wie folgt, um auch TLSv1.0 und TLSv1.1 zu deaktivieren.

SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Speichern und schließen Sie die Datei. Starten Sie dann Apache neu.

sudo systemctl restart apache2

Automatische Verlängerung des Zertifikats

Um das Let’s Encrypt-Zertifikat automatisch zu erneuern, bearbeiten Sie einfach die Crontab-Datei des Root-Benutzers.

sudo crontab -e

Fügen Sie dann unten die folgende Zeile hinzu.

@daily certbot renew --quiet && systemctl reload apache2

--quiet flag unterdrückt normale Meldungen. Wenn Sie Fehlermeldungen erhalten möchten, fügen Sie die folgende Zeile am Anfang der crontab-Datei hinzu.

MAILTO=your-email-address

Das Neuladen von Apache ist dafür erforderlich, um den Clients das neue Zertifikat zu präsentieren.

CloudFlare-CDN

Das erste, was Sie wissen müssen, ist, dass Sie, wenn Sie das Let’s Encrypt-Zertifikat auf Ihrem Server installieren und gleichzeitig den CDN-Dienst von CloudFlare verwenden möchten, das universelle SSL von CloudFlare auf Ihrer Website aktivieren müssen, was bedeutet

  • Verbindungen zwischen Website-Besuchern und dem CloudFlare-Edge-Server werden mit dem universellen SSL-Zertifikat von CloudFlare verschlüsselt.
  • Die Kommunikation zwischen Ihrem Ursprungsserver und dem CloudFlare-Edge-Server wird mit einem von Let’s Encrypt ausgestellten Zertifikat verschlüsselt.

Wenn Sie das Let’s Encrypt-Zertifikat auf Ihrem Ursprungsserver installieren, HTTP auf HTTPS umleiten und CloudFlare Universal SSL deaktivieren, beschweren sich die Webbrowser, dass sich Ihre Website in einer endlosen Umleitungsschleife befindet, weil CloudFlare HTTPS auf HTTP umleitet.

Das zweite, was Sie wissen müssen, ist, dass Sie, wenn Sie den CAA-Eintrag aktivieren möchten, während Sie CloudFlare Universal SSL verwenden, auch den folgenden CAA-Eintrag erstellen müssen.

example.com. IN CAA 0 issue "comodoca.com"

example.com. IN CAA 0 issue "digicert.com"

example.com. IN CAA 0 issue "globalsign.com

Folgen Sie diesem Beitrag, um den CAA-Eintrag für das universelle SSL-Zertifikat von CloudFlare hinzuzufügen.

Wie gehen Sie also vor, um das Let’s Encrypt-Zertifikat mit CloudFlare zu installieren? Nun, es gibt zwei Szenarien.

  1. Sie haben das Let’s Encrypt-Zertifikat bereits mit den obigen Schritten installiert, jetzt möchten Sie den CloudFlare CDN-Dienst aktivieren.
  2. Ihre Website verwendet den CloudFlare CDN-Dienst, jetzt möchten Sie das Let’s Encrypt-Zertifikat auf Ihrem Ursprungsserver installieren.

Das erste Szenario

Wenn Sie sich im ersten Szenario befinden, können Sie fortfahren und den CloudFlare CDN-Dienst aktivieren und auch CloudFlare Universal SSL im CloudFlare Dashboard aktivieren, indem Sie zu Crypto gehen> SSL und wählen Sie Vollständig (Streng) aus . Ihre Website wird problemlos funktionieren.

Das zweite Szenario

Wenn Sie CloudFlare CDN verwenden und jetzt Let’s Encrypt auf Ihrem Ursprungsserver installieren möchten, führen Sie den folgenden Befehl aus, um das Let’s Encrypt TLS-Zertifikat zu erhalten und zu installieren.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

Nachdem das Zertifikat abgerufen und auf Ihrem Server installiert wurde, gehen Sie zum Cloudflare-Dashboard und aktivieren Sie CloudFlare Universal SSL.

Nächster Schritt

Ich hoffe, dieses Tutorial hat Ihnen geholfen, HTTPS auf dem virtuellen Apache-Host mit Let’s Encrypt auf Ubuntu zu aktivieren . Sie können auch eine ModSecurity-Webanwendungs-Firewall einrichten, um Ihre Website vor Hackern zu schützen.

  • So richten Sie ModSecurity mit Apache unter Debian/Ubuntu ein

Um Ihre Website zu beschleunigen, können Sie das HTTP/2-Protokoll mit Apache aktivieren.

  • Aktivieren des HTTP/2-Protokolls mit Apache auf Ubuntu

Wenn Sie diesen Beitrag nützlich fanden, abonnieren Sie wie immer unseren kostenlosen Newsletter, um weitere Anleitungen zu erhalten.


Ubuntu
  1. So sichern Sie Nginx mit Lets Encrypt auf Ubuntu 20.04 / 18.04

  2. Sichern Sie Nginx mit Let’s Encrypt auf Ubuntu 18.04 – wie geht das?

  3. So installieren Sie Let’s Encrypt mit Apache unter CentOS 7

  4. So aktivieren Sie das HTTPS-Protokoll mit Apache 2 unter Ubuntu 20.04

  5. So sichern Sie Apache mit Lets Encrypt unter Ubuntu 18.04

Sichern Sie Nginx mit Let’s Encrypt SSL-Zertifikat auf Ubuntu 18.04

Installieren Sie LAMP Server mit Let’s Encrypt Free SSL auf Ubuntu 18.04

So aktivieren Sie HTTP/2 mit Apache in Ubuntu

So sichern Sie Nginx mit Let’s Encrypt unter Ubuntu 20.04

So sichern Sie Apache mit Let’s Encrypt unter Ubuntu 20.04

So installieren Sie Django 3.2 auf Ubuntu 20.04 mit Apache und WSGI