[PYTHON] SSL-fähige mehrere Sites auf einem Server mit nginx und Let's Encrypt

Hier werde ich vorstellen, wie man eine Site-SSL mit Let's Encrypt und Nginx erstellt und was ich getan habe, als ich mehrere Sites auf einem Server mit der Nginx-Funktion betrieben habe und alle SSL erstellt habe. Machen. Wir haben die Nginx-Konfigurationsdatei veröffentlicht. Weitere Informationen finden Sie hier. https://github.com/TakuKobayashi/ActivatingNginxConf

Was ist SSL?

SSL ist ein Mechanismus zur Kommunikation durch Verschlüsselung von Daten. Wenn Sie SSL aktivieren, können Sie URLs wie https: // (für HTTP) und wss: // (für Websocket) wie unten gezeigt verwenden. https.png

Einzelheiten finden Sie unter hier usw.

SSL-Zertifikat

Ein SSL-Zertifikat </ b> </ font> ist erforderlich, damit der Server SSL-fähig und kommunikationsfähig ist. SSL-Zertifikate werden allgemein als [Zertifizierungsstelle] bezeichnet (https://ja.wikipedia.org/wiki/%E8%AA%8D%E8%A8%BC%E5%B1%80) und sind vertrauenswürdig. Sie müssen Geld von den drei Parteien bezahlen, um ein Zertifikat zu erhalten. Die Kosten betragen Zehntausende bis Hunderttausende Yen pro Jahr </ font>. Es ist hoch...

Was ist Let's Encrypt?

Let's Encrypt ist eine Zertifizierungsstelle (Gruppe / Projekt), die kostenlos SSL-Zertifikate ausstellt </ font>.

Holen Sie sich ein SSL-Zertifikat mit Let's Encrypt

Um ein SSL-Zertifikat mit Let's Encrypt zu erhalten, muss Python 2.7 oder höher installiert sein. Installieren Sie daher Python 2.7 oder höher. Ich habe Python installiert, nachdem ich Pyenv eingegeben habe, damit ich zwischen Python-Versionen wechseln kann.

Installieren Sie Python

Installieren Sie die erforderlichen Bibliotheken usw., um Pyenv (für CentOS) zu verwenden.

yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel bzip2 sqlite
zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel

Installieren Sie Pyenv

git clone git://github.com/yyuu/pyenv.git

Pass den Weg nach Pyenv

cd pyenv/
vi ~/.bashrc

Suchen Sie den Speicherort von pyenv in .bashrc (hier in / app / library / pyenv), schreiben Sie Folgendes und führen Sie es durch den Pfad.

export PYENV_ROOT="/app/library/pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

Aktivieren Sie den festgelegten Pfad.

source ~/.bashrc

Und

pyenv

Wenn kein Fehler vorliegt, wird der Pfad übergeben.

Finden Sie heraus, welche Python-Version Sie installieren können

pyenv install --list

Installieren Sie Python mit Pyenv

Hier installieren wir Python 2.7.13

pyenv install 2.7.13

Stellen Sie das installierte Python zur Verfügung

pyenv global 2.7.13

mit diesem

python

Wird ausgeführt und wenn kein Fehler auftritt, ist die Installation abgeschlossen.

Holen Sie sich ein SSL-Zertifikat von Let's Encrypt

Erstellen Sie einen dedizierten Pfad für die Zertifikatsüberprüfung

Wenn Sie das nächste Mal certbot verwenden, um ein Zertifikat abzurufen, wird überprüft, ob der Server vorhanden ist. Sie müssen einen dedizierten Pfad erstellen, um diese Prüfung durchzuführen. Dieses Mal erstellen wir ein Verzeichnis unter dem Dokumentstamm. Verwenden Sie Nginx Für Nginx befindet sich das Dokumentstammverzeichnis im [nginx-Stammverzeichnis] /conf.d/default.conf. In diesem Fall handelt es sich um den unten beschriebenen Inhalt.

 location / {
   root   /usr/share/nginx/html;
   index  index.html index.htm;
 }

Erstellen Sie daher ein leeres Verzeichnis, um den Pfad vom Dokumentstamm wie unten gezeigt festzulegen.

mkdir [Nginx-Stammverzeichnis]/html/.well-known

Bearbeiten Sie als Nächstes [nginx-Stammverzeichnis] /nginx.conf, damit der erstellte Pfad auf der Nginx-Seite verwendet werden kann.

http{
  ...
  server {
    ...
    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html/.well-known;
    }
    ...
  }
}

Starten Sie dann nginx neu, damit die Änderungen übernommen werden.

service nginx restart

Installieren Sie certbot (mit Git)

certbot ist ein Tool von Let’s Encrypt und ein Agent (Client), der mit Let’s Encrypt kommuniziert. Es gibt eine Methode, die Git nicht verwendet, aber dieses Mal werden wir sie mit der Methode installieren, die Git verwendet.

git clone https://github.com/certbot/certbot

Holen Sie sich ein Zertifikat mit certbot

cd certbot/
./certbot-auto certonly

Dann gibt es die folgenden Ankündigungen, so dass wir verschiedene Einstellungen vornehmen werden.

How would you like to authenticate with the ACME CA?

1: Spin up a temporary webserver (standalone)

2: Place files in webroot directory (webroot)

Select the appropriate number [1-2] then enter: 2
Enter email address (used for urgent renewal and security notices) (Enter 'c' to

cancel):[Mail Adresse]

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at

https://acme-v01.api.letsencrypt.org/directory

(A)gree/(C)ancel: A



Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and

our work to encrypt the web, protect its users and defend digital rights.

(Y)es/(N)o: Y
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):[Domainname](WennSiemehrereDomänenfestlegenmöchten,listenSiediesedurchKommasgetrenntauf.Hierue4yochi.AufNetzsetzen)
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for ue4yochi.net

Select the webroot for ue4yochi.net:

1: Enter a new webroot

Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
Input the webroot for ue4yochi.net: (Enter 'c' to cancel):[Der Pfad des oben erstellten Verzeichnisses]

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/ue4yochi.net/fullchain.pem. Your cert will
   expire on 2017-10-03. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot-auto again. To
   non-interactively renew all of your certificates, run
   "certbot-auto renew"
 - Your account credentials have been saved in your Certbot
   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 Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Über, In / etc / letsencrypt / live / [Domainname] / </ font> Wenn Sie über die Dateien fullchain.pem </ font> und privkey.pem </ font> verfügen, haben Sie das Zertifikat erhalten.

Wenden Sie das erhaltene Zertifikat an und aktivieren Sie SSL.

Bearbeiten Sie die Datei nginx.conf wie folgt:

http{
  ...
  server {
    listen 443 ssl;
        server_Name Domain A.;
    ...
    ssl_certificate     /etc/letsencrypt/live/[Domainname]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[Domainname]/privkey.pem;
    ...
    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html/.well-known;
    }
    ...
    location / {
      ...
    }
  }
}

Starten Sie dann nginx neu, damit die Änderungen übernommen werden.

service nginx restart

Wenn der Server jetzt läuft https://ドメインAにブラウザでアクセスすることができれば、SSL化完了です。

Betreiben Sie mit nginx mehrere Sites auf einem Server und stellen Sie alle SSLs her

Die oben genannte SSL-Unterstützung in Nginx kann auch angewendet werden, wenn versucht wird, mehrere Standorte auf einem Server zu betreiben. Ich möchte nicht zu viel Geld ausgeben, daher wäre es schön, wenn ich mehrere Websites auf einem Server betreiben könnte ♪ Darüber hinaus wäre es großartig, wenn alle SSL unterstützen könnten Eine oder mehrere Domänen sind jedoch erforderlich, um mehrere Standorte auf einem Server zu betreiben. </ B> </ font>.

Festlegen, dass mit nginx mehrere Standorte (verschiedene Domänen) auf einem Server betrieben werden sollen

Zu diesem Zeitpunkt sind die Einstellungen für eine Site bereits abgeschlossen. Erstellen Sie zunächst einen überprüfbaren Pfad wie den ersten, damit Sie mit certbot ein Zertifikat für den zweiten Standort erhalten können. Sie können das gleiche wie das erste verwenden, aber Sie müssen jedes einstellen. Beschreiben Sie die Nginx-Konfigurationsdatei wie folgt.

http{
  ...
  server {
    listen 443 ssl;
        server_Name Domain A.;
    ...
    ssl_certificate     /etc/letsencrypt/live/[Domainname]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[Domainname]/privkey.pem;
    ...
    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html/.well-known;
    }
    ...
    location / {
      ...
    }
  }

  server {
    listen 443 ssl;
        server_Name Domain B.;
    ...
    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html/.well-known;
    }
    ...
    location / {
      ...
    }
}

Starten Sie dann nginx neu, damit die Änderungen übernommen werden.

service nginx restart

Ausstellung eines SSL-Zertifikats, das an mehreren Standorten verwendet werden kann

Geben Sie Folgendes wie oben beschrieben ein.

./certbot-auto certonly

Wenn Sie in diesem Fall bereits ein Zertifikat erhalten haben und eine neue Domäne erhalten und ein Zertifikat hinzufügen möchten, können Sie es anwenden, indem Sie dasselbe Verfahren ausführen. Lesen Sie weiter die Ankündigungen, die herauskamen,

...
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):Domain A.,Domäne B.,...
...

Wenn die oben genannten Fragen gestellt werden, können Zertifikate ausgestellt werden, die mehreren Domänen entsprechen, indem mehrere Arten von Domänen angeordnet werden, die durch ,. Zum Zeitpunkt der Einstellung werden Sie gefragt, wo Sie die einzelnen Einstellungen überprüfen sollen. Dies ist jedoch in Ordnung, da Sie dieselbe angeben.

Wenden Sie das von nginx erhaltene Zertifikat jeweils an.

Zertifikate für mehrere Domänen werden in derselben Datei am selben Speicherort wie im ersten Fall oben festgelegt. Ändern Sie daher die Datei nginx.conf wie folgt, damit sie bei der Anwendung auf mehrere Domänen identisch ist. Ich werde.

http{
  ...
  server {
    listen 443 ssl;
        server_Name Domain A.;
    ...
    ssl_certificate     /etc/letsencrypt/live/[Domainname]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[Domainname]/privkey.pem;
    ...
    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html/.well-known;
    }
    ...
    location / {
      ...
    }
  }

  server {
    listen 443 ssl;
        server_Name Domain B.;
    ssl_certificate     /etc/letsencrypt/live/[Domainname]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[Domainname]/privkey.pem;
    ...
    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html/.well-known;
    }
    ...
    location / {
      ...
    }
  }
}

Starten Sie dann nginx neu, damit die Änderungen übernommen werden.

service nginx restart

Wenn der Server jetzt läuft https://ドメインA und https://ドメインB Wenn Sie mit einem Browser darauf zugreifen können, sind beide SSL-fähig.

Ergänzung

Wenn Sie den obigen Server so einstellen, dass mehrere verschiedene Domänen angezeigt werden können, hat die in nginx.conf beschriebene obere Einstellung Vorrang. Zum Beispiel, wenn Sie die folgende URL eingeben https://[IPアドレス] Oder https://[DNS名] Wenn Sie eingeben, wird die Site von Domain A angezeigt.

Automatische Erneuerung des SSL-Zertifikats

Das Ablaufdatum des von Let's Encrypt erhaltenen Zertifikats beträgt 3 Monate </ font>. Daher muss das Zertifikat vor Ablauf erneuert werden. Wenn Sie das Zertifikat automatisch erneuern möchten, können Sie es automatisch erneuern, indem Sie cron einstellen.

crontab -e

Öffnen Sie die Cron-Einstellungen mit und stellen Sie sie wie folgt ein.

0 4 1 * * [certbot-mit auto bestehen]/certbot-auto renew && service nginx reload

Jetzt können Sie das SSL-Zertifikat automatisch erneuern und die Einstellungen in Nginx widerspiegeln. (Der oben beschriebene Vorgang wird einmal im Monat durchgeführt, um zu überprüfen, ob das Zertifikat erneuert wurde.)

Referenz

SSL-Zertifikat von Let's Encrypt (Certbot) in Nginx + Reverse-Proxy-Umgebung automatisch erneuern, ohne den Webserver anzuhalten - Qiita Die Geschichte des Versuchs, mit Nginx als Reverse-Proxy zu verschlüsseln - Qiita Installieren Sie Let's Encrypt auf einem Server unter Nginx und stellen Sie ein SSL-Zertifikat aus --UTALI So stellen Sie die Ausstellung und automatische Verlängerung von SSL-Zertifikaten mit Let's Encrypt + Nginx - Qiita ein Der Lichtgeschwindigkeits-WEB-Server (nginx) wird durch Verschlüsselung in SSL und HTTP / 2 konvertiert. Stellen Sie dann die Sicherheitsbewertung auf A + ein. --Qiita Veröffentlichen Sie eine sichere Website mit Let’s Encrypt SSL-Zertifikat - Sakura Knowledge