Gestern habe ich einen Glücksbrief von Google erhalten, weil ich die Google Search Console verwende, um die Indexierung der Seite in der Google-Suchmaschine zu tracken. Der Kern des Schreibens besteht darin, dass Google Chrome die Unsicherheit einer Website meldet, die das http-Protokoll auf den Seiten verwendet, die ein Passwort erfordern. Und wenn Sie bedenken, dass sich auf meiner Website das Autorisierungsformular auf allen Seiten befindet, wird die Warnung auf allen Seiten der Website angezeigt. Nicht die angenehmste Situation, also musste ich schnell ein SSL-Zertifikat besorgen und https konfigurieren.
Derzeit gibt es eine Zertifizierungsstelle Let`s Encrypt , die kostenlose Zertifikate für einen Zeitraum von 90 Tagen ausstellt. Diese Zertifizierungsstelle wird unterstützt von Electronic Frontier Foundation (EFF), Mozilla Foundation, Akamai, Cisco Systems.
Der Vorgang zum Abrufen und Installieren eines Zertifikats ist automatisiert, aber im Fall einer Website, die auf Django und Nginx ausgeführt wird, müssen Sie zusätzlich an den Nginx -Servereinstellungen arbeiten.
Ein Zertifikat erhalten
Certbot-Software wird verwendet, um ein Zertifikat zu erhalten und automatisch zu aktualisieren. Auf der Let`s encrypt-Website gibt es einen Link zu dieser Software, wo Sie den Typ Ihres Betriebssystems und den Server auswählen können, der zum Bereitstellen von Inhalten verwendet wird auf Ihrer Website. In meinem Fall sind dies Nginx und Ubuntu 16.04 .
Es wird auch Anweisungen zum Installieren und Erhalten eines Zertifikats geben.
Verwenden Sie den folgenden Befehl, um die Zertifizierungssoftware zu installieren:
sudo apt-get install letsencrypt
Als nächstes müssen Sie ein Zertifikat mit dem Plug-in webroot mit dem folgenden Befehl abrufen:
sudo letsencrypt certonly --webroot -w /var/www/example -d example.com -d www.example.com
Wo das Verzeichnis für die Zertifizierung Ihrer Website angegeben ist, in diesem Fall /var/www/example , muss es erstellt werden und die entsprechenden Domains, für die Sie Zertifikate erhalten.
In diesem Fall gibt es eine Einschränkung. Bereits in diesem Schritt müssen Sie Nginx konfigurieren, da im Verzeichnis /var/www/example ein verstecktes .well-known -Verzeichnis erstellt wird, das zum Erhalt einer Zertifikat. Sie können mehr über die Ersteinrichtung von Nginx im relevanten Artikel lesen.
Daher konfigurieren wir zunächst Nginx wie unten gezeigt und starten es neu.
server { listen 80; listen [::]:80; server_name example.com; location /.well-known { alias /var/www/example/.well-known; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Dann erhalten Sie erfolgreich Ihr SSL-Zertifikat.
Konfigurieren Sie das https-Protokoll
Nachdem wir das Zertifikat erhalten haben, müssen wir das https-Protokoll konfigurieren und dafür den Port 443 auf dem Server öffnen.
sudo ufw allow 443/tcp
Und konfigurieren Sie Nginx.
server { listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location /.well-known { alias /var/www/example/.well-known; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
In diesem Fall geben Sie die Pfade zu Ihren Zertifikaten und die Ports an, auf denen der Server auf eine Verbindung wartet.
Aufbau einer http-Verbindung
Ob Sie Benutzern die Möglichkeit lassen, sich mit dem Protokoll http zu verbinden, liegt bei Ihnen, aber welchen Sinn hat es, die Möglichkeit zu lassen, mit diesem Protokoll zu arbeiten, wenn es bereits https gibt. Daher werden wir umleiten der Benutzer von Seiten mit http auf die gleiche Seite mit https .
server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location /.well-known { alias /var/www/example/.well-known; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Wir starten Nginx neu und stellen sicher, dass wir beim Verbindungsversuch über http automatisch auf die Verbindung über https umgeleitet werden.
Automatische Zertifikatserneuerung
Der folgende Befehl wird verwendet, um das Zertifikat zu aktualisieren:
letsencrypt renew
Aber der Prozess kann mit cron automatisiert werden (ein Daemon-Programm, das entwickelt wurde, um Aufgaben zu einer bestimmten Zeit oder in bestimmten Intervallen auszuführen).
Führen Sie den folgenden Befehl aus, um Cron als Root-Benutzer zu bearbeiten:
sudo crontab -e
Sie haben die Wahl zwischen möglichen Editoren, wählen Sie Ihren Editor nach Ihren Wünschen. Und ich verwende nano. Fügen Sie dann die folgende Zeile in die cron. -Konfiguration ein
30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/letsencrypt-renew.log
In diesem Fall wird montags um 2:30 Uhr versucht, das Zertifikat zu erneuern.
Inhaltskorrektur
Als letztes bleibt noch die Anpassung aller Links auf der Seite. Das heißt, Sie müssen http auf https ändern, damit die interne Verlinkung der Website keine zusätzlichen Weiterleitungen erzeugt.
Für Django empfehle ich Timeweb-Hoster VDS-Server .
Добрый день хочу обновить сертификат, но получаю следующее
. Как правильно обновить сертифика, подскажите? Может что в конфиге поправить?Добрый день. Либо webroot не отработал как следует, либо вы где-то в настройке http накосячили. Смотрите строчки, где указывается путь к ssl сертификату в конфиге nginx.