[PYTHON] SSL-active plusieurs sites sur un serveur avec nginx et Let's Encrypt

Ici, je vais vous présenter comment créer un site SSL à l'aide de Let's Encrypt et nginx, et ce que j'ai fait lorsque j'ai exploité plusieurs sites sur un serveur en utilisant la fonction nginx telle qu'elle est et que je les ai tous rendus SSL. Faire. Nous avons publié le fichier de configuration nginx, veuillez donc vous référer ici pour plus de détails. https://github.com/TakuKobayashi/ActivatingNginxConf

Qu'est-ce que SSL?

SSL est un mécanisme de communication en cryptant des données. Si vous activez SSL, vous pourrez utiliser des URL telles que https: // (pour HTTP) et wss: // (pour Websocket) comme indiqué ci-dessous. https.png

Pour plus de détails, voir ici, etc.

Certificat SSL

Un certificat SSL </ b> </ font> est nécessaire pour que le serveur soit compatible SSL et puisse communiquer. Les certificats SSL sont communément appelés Autorité de certification et sont approuvés. Vous devez payer de l'argent des trois parties pour obtenir un certificat. Le coût est de dizaines de milliers à des centaines de milliers de yens par an </ font>. C'est haut ...

Qu'est-ce que Let's Encrypt

Let's Encrypt est une autorité de certification (groupe / projet) qui délivre des certificats SSL gratuitement </ font>.

Obtenez un certificat SSL avec Let's Encrypt

Pour obtenir un certificat SSL à l'aide de Let's Encrypt, Python 2.7 ou supérieur doit être installé, alors installez Python 2.7 ou supérieur. J'ai installé Python après avoir mis Pyenv afin de pouvoir basculer entre les versions de Python.

Installez Python

Installez les bibliothèques nécessaires, etc. pour utiliser Pyenv (pour CentOS)

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

Installez Pyenv

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

Passer le chemin de Pyenv

cd pyenv/
vi ~/.bashrc

Trouvez l'emplacement de pyenv dans .bashrc (ici dans / app / library / pyenv) et écrivez ce qui suit et passez-le.

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

Activez le chemin défini.

source ~/.bashrc

Et

pyenv

S'il n'y a pas d'erreur, le chemin est transmis.

Découvrez quelle version de Python vous pouvez installer

pyenv install --list

Installer Python à l'aide de Pyenv

Ici, nous allons installer Python 2.7.13

pyenv install 2.7.13

Rendre le Python installé disponible

pyenv global 2.7.13

avec ça

python

Est exécuté, et si aucune erreur ne se produit, l'installation est terminée.

Obtenez un certificat SSL de Let's Encrypt

Créer un chemin dédié pour la vérification des certificats

La prochaine fois que vous utiliserez certbot pour obtenir un certificat, il vérifiera l'existence du serveur. Vous devez créer un chemin dédié pour accueillir cette vérification. Cette fois, nous répondrons en créant un répertoire sous la racine du document. Utilisez Nginx Pour Nginx, la racine du document se trouve dans [répertoire racine de nginx] /conf.d/default.conf. Dans ce cas, il s'agit du contenu décrit ci-dessous.

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

Par conséquent, créez un répertoire vide pour définir le chemin à partir de la racine du document comme indiqué ci-dessous.

mkdir [répertoire racine nginx]/html/.well-known

Ensuite, éditez [répertoire racine nginx] /nginx.conf afin que le chemin créé puisse être utilisé du côté nginx.

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

Ensuite, redémarrez nginx pour que les modifications s'appliquent.

service nginx restart

Installez certbot (à l'aide de Git)

certbot est un outil fourni par Let ’s Encrypt et est un agent (client) qui communique avec Let’ s Encrypt. Il existe une méthode qui n'utilise pas Git, mais cette fois nous allons l'installer en utilisant la méthode qui utilise Git.

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

Obtenez un certificat en utilisant certbot

cd certbot/
./certbot-auto certonly

Ensuite, il y a les annonces suivantes, nous allons donc faire divers réglages.

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):[adresse mail]

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):[Nom de domaine](Sivoussouhaitezdéfinirplusieursdomaines,répertoriez-lesséparéspardesvirgules.Iciue4yochi.Définirsurnet)
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):[Le chemin du répertoire créé ci-dessus]

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

Au dessus de, Dans / etc / letsencrypt / live / [nom de domaine] / </ font> Si vous disposez des fichiers fullchain.pem </ font> et privkey.pem </ font>, vous avez obtenu le certificat.

Appliquez le certificat obtenu et activez SSL.

Modifiez le fichier nginx.conf comme suit:

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

Ensuite, redémarrez nginx pour que les modifications s'appliquent.

service nginx restart

Si le serveur fonctionne maintenant https://ドメインAにブラウザでアクセスすることができれば、SSL化完了です。

Exploitez plusieurs sites sur un serveur à l'aide de nginx et créez tous les SSL

La prise en charge SSL ci-dessus dans nginx peut être appliquée même lorsque vous essayez d'exploiter plusieurs sites sur un serveur. Je ne veux pas dépenser trop d'argent, alors ce serait bien si je pouvais gérer plusieurs sites sur un serveur ♪ De plus, ce serait formidable si tous pouvaient prendre en charge SSL ♪ Cependant, un ou plusieurs domaines sont requis pour exploiter plusieurs sites sur un serveur </ b> </ font>.

Configuration pour exploiter plusieurs sites (différents domaines) sur un serveur avec nginx

À ce stade, les paramètres d'un site sont déjà terminés. Tout d'abord, créez un chemin vérifiable comme le premier afin que vous puissiez obtenir un certificat pour le deuxième site avec certbot. Vous pouvez utiliser le même que le premier, mais vous devez définir chacun d'eux. Décrivez le fichier de configuration nginx comme suit.

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

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

Ensuite, redémarrez nginx pour que les modifications s'appliquent.

service nginx restart

Émission d'un certificat SSL utilisable sur plusieurs sites

Entrez ce qui suit de la même manière que la procédure d'acquisition de certificat ci-dessus.

./certbot-auto certonly

Dans ce cas, si vous avez déjà obtenu un certificat et que vous souhaitez obtenir un nouveau domaine et ajouter un certificat, vous pouvez l'appliquer en exécutant la même procédure. Continuez à lire les annonces qui ont été publiées,

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

Lorsque les questions ci-dessus sont posées, il est possible d'émettre des certificats correspondant à plusieurs domaines en organisant plusieurs types de domaines séparés par,. Au moment du réglage, il vous sera demandé où vérifier chacun d'eux, mais c'est OK car vous spécifiez le même.

Appliquez le certificat obtenu par nginx à chacun.

Les certificats pour plusieurs domaines sont définis dans le même fichier au même emplacement que dans le premier cas ci-dessus, donc modifiez nginx.conf comme suit afin qu'il soit le même lors de l'application à plusieurs domaines. Je vais.

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

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

Ensuite, redémarrez nginx pour que les modifications s'appliquent.

service nginx restart

Si le serveur fonctionne maintenant https://ドメインA et https://ドメインB Si vous pouvez accéder avec un navigateur, les deux sont compatibles SSL.

Supplément

Si vous définissez le serveur ci-dessus pour qu'il puisse voir plusieurs domaines différents, le paramètre supérieur décrit dans nginx.conf prévaudra. Par exemple, si vous entrez l'URL suivante https://[IPアドレス] Ou https://[DNS名] Si vous entrez, le site du domaine A s'affiche.

Renouvellement automatique du certificat SSL

La date d'expiration du certificat obtenu par Let's Encrypt est de 3 mois </ font>. Par conséquent, il est nécessaire de renouveler le certificat avant son expiration. Si vous souhaitez renouveler automatiquement le certificat, vous pouvez le renouveler automatiquement en définissant cron.

crontab -e

Ouvrez les paramètres cron avec et définissez comme suit.

0 4 1 * * [certbot-passer avec auto]/certbot-auto renew && service nginx reload

Vous pouvez maintenant renouveler automatiquement le certificat SSL et refléter les paramètres dans nginx. (Le processus ci-dessus est effectué une fois par mois pour vérifier si le certificat a été renouvelé.)

référence

Renouveler automatiquement le certificat SSL Let's Encrypt (Certbot) dans l'environnement proxy inverse Nginx + sans arrêter le serveur Web --Qiita L'histoire d'essayer de Chiffrer en utilisant Nginx comme proxy inverse-Qiita Installez Let's Encrypt sur un serveur fonctionnant sous Nginx et émettez un certificat SSL --UTALI Comment définir l'émission de certificat SSL et le renouvellement automatique avec Let's Encrypt + Nginx --Qiita Le serveur WEB à vitesse légère (nginx) est converti en SSL et HTTP / 2 par Let's encrypt. Ensuite, réglez la cote de sécurité sur A +. --Qiita Publication d’un site Web sécurisé avec le certificat SSL Let ’s Encrypt - Sakura Knowledge