Übersicht
Let’s encrypt ist eine Zertifizierungsstelle, die eine einfache Möglichkeit bietet, kostenlos ein SSL/TLS-Zertifikat für Ihre Website zu erhalten, wodurch verschlüsseltes https auf Webservern ermöglicht wird. Let’s Encrypt vereinfacht die Beschaffung und Installation von SSL-Zertifikaten mit einer Software namens CertBot. Dieser Software-Client dient einem vollautomatischen Prozess für Apache-Webserver. Kostenlose SSL-Zertifikate von Let’s Encrypt können jedoch mit einigen internen Anpassungen manuell auf jedem Webserver installiert werden.
In diesem Tutorial demonstrieren wir das Verfahren zur Verwendung von certbot-auto
Lassen Sie uns den Client verschlüsseln, um ein kostenloses SSL-Zertifikat zu erhalten und es mit Nginx unter Ubuntu 14.04 zu verwenden. Dieses Tutorial erklärt Ihnen auch, wie Sie Ihr SSL-Zertifikat automatisch erneuern können. Wenn Sie einen anderen Webserver betreiben, folgen Sie einfach der Dokumentation Ihres Webservers, um zu erfahren, wie Sie das Zertifikat mit Ihrer Einrichtung verwenden.
Voraussetzung
- Nicht-Root-Benutzer mit Sudo-Berechtigungen
- Sie müssen die Domain besitzen oder die administrative Kontrolle über die Domain haben, für die Sie ein SSL-Zertifikat erwerben möchten.
- Ein unter dem DNS-Panel erstellter A-Record, der Ihre Domain auf die öffentliche IP-Adresse Ihres Servers verweist. Dies ist erforderlich, da Let’s Encrypt validiert, dass Sie der Eigentümer der Domain sind, für die es ein Zertifikat ausstellt. Zum Beispiel, wenn Sie ein Zertifikat für
example.com
erhalten möchten , muss diese Domäne zu Ihrem Server aufgelöst werden, damit der Validierungsprozess funktioniert. Unser Setup verwendetexample.com
undwww.example.com
wie die Domänennamen, daher sind beide DNS-Einträge erforderlich
Schritt 1 – Let’s Encrypt Client installieren
Zunächst müssen Sie den CertBot-Softwareclient auf Ihren Server herunterladen. Sie können CertBot von der offiziellen EFF-Website herunterladen.
Laden Sie die CertBot-Software in das Verzeichnis /usr/local/sbin directory on your server:
cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto
$ cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto [sudo] password for example: --2016-11-28 13:26:28-- https://dl.eff.org/certbot-auto Resolving dl.eff.org... 173.239.79.196 Connecting to dl.eff.org|173.239.79.196|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 44442 (43K) [text/plain] Saving to: `certbot-auto' 100%[======================================>] 44,442 154K/s in 0.3s 2016-11-28 13:26:30 (154 KB/s) - `certbot-auto' saved [44442/44442]
Cert-Bot wird jetzt nach /usr/local/sbin auf Ihren Server heruntergeladen. Machen Sie nun die Datei ausführbar, indem Sie den folgenden Befehl eingeben:
sudo chmod a+x /usr/local/sbin/certbot-auto
Die Cerbot-Auto-Software kann nun installiert werden.
Schritt 2 – Erhalten Sie ein Zertifikat
Es gibt eine Reihe von Möglichkeiten, ein SSL-Zertifikat von Let’s Encrypt über verschiedene Plugins zu erhalten. Sie müssen ein Authenticator-Plug-in erwerben, um ein SSL-Zertifikat zu erwerben. Stellen Sie sicher, dass diese Plugins nur das Zertifikat erhalten und Sie das Zertifikat manuell installieren müssen.
In diesem Tutorial verwenden wir ein Plugin namens Webroot zur Authentifizierung.
Webroot-Plugin
Das Webroot-Plug-in generiert eine exklusive Datei im Verzeichnis /.wellknown innerhalb Ihres Dokumentenstammverzeichnisses, auf die Let's Encrypt über Ihren Webserver zugreifen kann, und dies wird die Validierung abschließen Ihre Autorität über die Domain. Möglicherweise müssen Sie die Berechtigung für die Datei in / .well-known.
konfigurierenWenn Sie Ngnix noch nicht installiert haben, verwenden Sie die folgenden Befehle, um es zu installieren:
sudo yum update sudo yum install ngnix
Um die Datei für certbot-auto zugänglich zu machen, nehmen wir einige erforderliche Änderungen an der Nginx-Konfigurationsdatei vor. Die ngnix-Konfigurationsdatei wird standardmäßig im Verzeichnis /etc/nginx/sites-available/default abgelegt. Lassen Sie uns die Konfigurationsdatei bearbeiten:
sudo vim /etc/nginx/sites-available/default
Fügen Sie den folgenden Standortblock zur Datei hinzu:
Zu SSL-Serverblock hinzufügenserver {
. . .
location ~ /.well-known {
allow all;
}
. . .
}
Sie werden auch nachsehen wollen, auf was Ihr Dokumentenstamm eingestellt ist, indem Sie nach root
suchen Direktive, da der Pfad für die Verwendung des Webroot-Plugins erforderlich ist. Wenn Sie die Standardkonfigurationsdatei verwenden, ist das Stammverzeichnis /usr/share/nginx/html
.
Speichern Sie die Datei, indem Sie Esc gefolgt von :wq drücken! und drücken Sie die Eingabetaste.
Sie können die Konfigurationsdatei auf Syntaxfehler überprüfen:
sudo nginx -t
Wenn Sie feststellen, dass die Konfigurationsdatei frei von Syntaxfehlern ist, starten Sie den ngnix-Dienst neu
sudo service nginx restart
Nun können wir das Webroot-Plugin zur Validierung verwenden, da wir den genauen Speicherort des Webroot-Pfads kennen. Verwenden Sie den folgenden Befehl zum Anfordern eines SSL-Zertifikats mit dem Webroot-Plugin:
certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
Domainnamen müssen mit dem -d angegeben werden Möglichkeit. Wenn Sie möchten, dass ein einzelnes Zertifikat mit mehreren Domainnamen funktioniert (z. B. example.com und www.example.com ), stellen Sie sicher, dass Sie alle einbeziehen, beginnend mit der Domain mit der höchsten Ebene (z. B. example.com ).
Hinweis: Das certbot-auto
Software erfordert Superuser-Rechte, daher müssen Sie Ihr Passwort eingeben, wenn Sie sudo
nicht verwendet haben vor kurzem.
Wenn certbot-auto initialisiert, werden Sie nach einigen Informationen gefragt. Die genauen Eingabeaufforderungen können je nachdem, ob Sie certbot-auto verwendet haben, variieren Kunde vor. Geben Sie die erforderlichen Informationen ein und wählen Sie am Ende „Zustimmen“ aus.
Output:IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to [email protected]
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Notieren Sie den Pfad und das Ablaufdatum aus der Ausgabe.
Firewall-Hinweis: Wenn Sie eine Fehlermeldung wie Failed to connect to host for DVSNI challenge
erhalten , muss die Firewall Ihres Servers möglicherweise so konfiguriert werden, dass TCP-Datenverkehr auf Port 80
zugelassen wird und 443
.
Hinweis: Wenn Ihre Domain über einen DNS-Dienst wie CloudFlare weitergeleitet wird, müssen Sie ihn vorübergehend deaktivieren, bis Sie das Zertifikat erhalten haben.
Zertifikatsdateien
Nachdem Sie das Zertifikat erhalten haben, haben Sie die folgenden PEM-codierten Dateien:
- cert.pem: Das Zertifikat Ihrer Domain
- chain.pem: Das Kettenzertifikat von Let’s Encrypt
- fullchain.pem:cert.pem und chain.pem kombiniert
- privkey.pem: Der private Schlüssel Ihres Zertifikats
Sie können überprüfen, ob die Dateien existieren, indem Sie diesen Befehl ausführen (indem Sie Ihren Domänennamen ersetzen):
sudo ls -l /etc/letsencrypt/live/your_domain_name
Die Ausgabe sollte die vier zuvor erwähnten Zertifikatsdateien sein. Gleich werden Sie Ihren Webserver für die Verwendung von fullchain.pem konfigurieren als Zertifikatsdatei und privkey.pem als Zertifikatschlüsseldatei.
Erzeugen Sie eine starke Diffie-Hellman-Gruppe
Um die Sicherheit weiter zu erhöhen, generieren Sie eine starke Diffie-Hellman-Gruppe mit dem folgenden Befehl:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Der Pfad der DH-Gruppe wäre /etc/ssl/certs/dhparam.pem 2048
Schritt 3 – Konfigurieren Sie TLS/SSL auf dem Webserver (Nginx)
Jetzt müssen Sie Ihren Nginx-Webserver konfigurieren, um ihn zu verwenden. Bearbeiten Sie die Nginx-Konfiguration, die Ihren Serverblock enthält:
sudo nano /etc/nginx/sites-available/default
Suchen Sie den server
Block. Auskommentieren oder löschen die Zeilen, die diesen Serverblock so konfigurieren, dass er auf Port 80 lauscht. In der Standardkonfiguration sollten diese beiden Zeilen gelöscht werden:
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
Wir werden diesen Serverblock so konfigurieren, dass er stattdessen auf Port 443 mit aktiviertem SSL lauscht. Innerhalb Ihres server {
Block, fügen Sie die folgenden Zeilen hinzu, aber ersetzen Sie alle Instanzen von example.com
mit eigener Domain:
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Dies ermöglicht Ihrem Server, SSL zu verwenden, und weist ihn an, das SSL-Zertifikat von Let’s Encrypt zu verwenden, das wir zuvor erhalten haben.
Um nur die sichersten SSL-Protokolle und -Chiffren zuzulassen und die von uns generierte starke Diffie-Hellman-Gruppe zu verwenden, fügen Sie demselben Serverblock die folgenden Zeilen hinzu:
Nginx-Konfigurationsergänzungen – 2 von 3 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
Zuletzt fügen Sie außerhalb des ursprünglichen Serverblocks (der auf HTTPS, Port 443 lauscht) diesen Serverblock hinzu, um HTTP (Port 80) auf HTTPS umzuleiten.
Nginx-Konfigurationsergänzungen – 3 von 3server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Speichern und beenden.
Testen Sie die Konfigurationsdatei auf Syntaxfehler, indem Sie Folgendes eingeben:
sudo nginx -t
Sobald Sie überprüft haben, dass keine Syntaxfehler vorliegen, setzen Sie die Änderungen in Kraft, indem Sie Nginx neu starten:
sudo service nginx restart
Das TLS/SSL-Zertifikat von Let’s Encrypt ist jetzt vorhanden. An dieser Stelle sollten Sie testen, ob das TLS/SSL-Zertifikat funktioniert, indem Sie Ihre Domain über HTTPS in einem Webbrowser aufrufen.
Sie können den Qualys SSL Labs-Bericht verwenden, um zu sehen, wie Ihre Serverkonfiguration abschneidet:
In einem Webbrowser:https://www.ssllabs.com/ssltest/analyze.html?d=example.com
Dieses SSL-Setup sollte ein A+ melden Bewertung.
Schritt 4 – Richten Sie die automatische Verlängerung ein
Let’s Encrypt-Zertifikate sind 90 Tage lang gültig, aber es wird empfohlen, dass Sie die Zertifikate alle 60 Tage erneuern, um eine Fehlerspanne zuzulassen. Zum Zeitpunkt des Verfassens dieses Artikels ist die automatische Verlängerung noch nicht als Funktion des Clients selbst verfügbar, aber Sie können Ihre Zertifikate manuell erneuern, indem Sie certbot-auto
ausführen Client mit dem renew
Option.
Führen Sie diesen Befehl aus, um den Erneuerungsprozess für alle installierten Domänen auszulösen:
certbot-auto renew
Da wir das Zertifikat kürzlich installiert haben, prüft der Befehl nur das Ablaufdatum und gibt eine Nachricht aus, die darüber informiert, dass das Zertifikat noch nicht erneuert werden muss. Die Ausgabe sollte etwa so aussehen:
Ausgabe:Checking for new version...
Requesting root privileges to run letsencrypt...
/home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
Beachten Sie, dass, wenn Sie ein gebündeltes Zertifikat mit mehreren Domänen erstellt haben, nur der Basisdomänenname in der Ausgabe angezeigt wird, aber die Verlängerung für alle in diesem Zertifikat enthaltenen Domänen gültig sein sollte .
Ein praktischer Weg, um sicherzustellen, dass Ihre Zertifikate nicht veraltet sind, besteht darin, einen Cron-Job zu erstellen, der den automatischen Verlängerungsbefehl regelmäßig für Sie ausführt. Da die Verlängerung zuerst das Ablaufdatum prüft und die Verlängerung nur dann ausführt, wenn das Zertifikat in weniger als 30 Tagen abläuft, ist es sicher, einen Cron-Job zu erstellen, der beispielsweise jede Woche oder sogar jeden Tag ausgeführt wird.
Lassen Sie uns die crontab bearbeiten, um einen neuen Job zu erstellen, der den Erneuerungsbefehl jede Woche ausführt. Um die Crontab für den Root-Benutzer zu bearbeiten, führen Sie Folgendes aus:
sudo crontab -e
Fügen Sie die folgenden Zeilen hinzu:
crontab-Eintrag30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload
Speichern und beenden. Dadurch wird ein neuer Cron-Job erstellt, der certbot-auto renew
ausführt Befehl jeden Montag um 2:30 Uhr und laden Sie Nginx um 2:35 Uhr neu (damit das erneuerte Zertifikat verwendet wird). Die vom Befehl erzeugte Ausgabe wird an eine Protokolldatei weitergeleitet, die sich unter /var/log/le-renewal.log
befindet .