J'utilise Python, ce qui est rare pour moi. J'ai dû écrire une application Web en Python au travail et j'ai utilisé Django. C'était la première fois que j'utilisais Django, mais j'ai trouvé que c'était un framework facile à utiliser. Avec un bon cadre et de gentils tutoriels, les différences dans les spécifications linguistiques ne sont pas trop perceptibles.
J'ai construit HTTP au travail, mais j'ai décidé d'essayer HTTPS avec Let's Encrypt, j'ai donc lancé cet article.
Cette fois, j'ai choisi Ubuntu. Je pense qu'Amazon Linux est basé sur CentOS, mais la version de sqlite est faible et Django ne peut pas être démarré.
--Sélectionnez Ubuntu 18.04 LTS comme type AMI.
Après cela, il y a une confirmation des paramètres, et cliquez sur "Démarrer" pour démarrer.
La clé privée ne peut être téléchargée qu'ici et sans elle, vous ne pourrez pas vous connecter au serveur.
--Sélectionnez un groupe de sécurité pour la page d'instance.
--Cliquez sur "Ajouter une règle" pour ajouter HTTP et HTTPS afin qu'ils soient accessibles depuis "n'importe où" respectivement. Ajoutez également un autre "TCP personnalisé" et ajoutez le numéro de port 8000.
――Après vous être connecté, mettons à jour le package.
sudo apt update
sudo apt -y upgrade
Le menu grub sera mis à jour, alors sélectionnez "installer la version du responsable du paquet".
--Installez Apache HTTP Server.
sudo apt -y install apache2
sudo systemctl start apache2
Définissez le nom du serveur.
sudo vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName my.domain.jp
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
Vous devrez obtenir un domaine car vous obtiendrez un certificat de serveur. Dans mon cas, j'utilise un service DDNS appelé MyDNS. Si vous avez besoin d'informations, veuillez voir ci-dessous.
Installez certbot.
sudo apt -y install certbot python3-certbot-apache
Exécutez le shell certbot automatisé de Let's Encrypt.
sudo certbot --apache
Le certificat est créé en saisissant de manière interactive l'adresse e-mail et le nom du serveur comme indiqué ci-dessous.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.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 our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: my.domain.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for my.domain.jp
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter](press 'c' to cancel): 2
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://my.domain.jp
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=my.domain.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/my.domain.jp/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/my.domain.jp/privkey.pem
Your cert will expire on 2020-09-04. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot 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
Lorsque vous accédez à https://my.domain.jp/, l'écran par défaut d'apache2 s'affiche et vous pouvez voir que le certificat de serveur émis par Let's Encrypt est installé.
Créez une application Web à l'aide de Django.
Puisque python est installé par défaut, installez pip et sqlite3.
sudo apt -y install python-pip sqlite3
Installez l'extension python OpenSSL.
pip install pyOpenSSL
Ensuite, installez Django.
sudo pip install Django
Django Extensions
Installez les extensions Django pour rendre votre serveur de développement Django compatible HTTPS.
pip install django-extensions
pip install Werkzeug
Créez un projet.
django-admin startproject letsencrypt
cd letsencrypt
Copiez le certificat du serveur Let's Encrypt et la clé privée dans votre dossier de projet.
sudo cp /etc/letsencrypt/live/my.domain.jp/fullchain.pem .
sudo cp /etc/letsencrypt/live/my.domain.jp/privkey.pem .
sudo chown ubuntu:ubuntu *.pem
Activez les extensions Django.
vi letsencrypt/settings.py
Ajoutez'django_extensions 'à la fin de INSTALLED_APPS. Ajoutez également le nom d'hôte à ALLOWED_HOSTS car vous devez autoriser l'accès par nom de serveur.
#Omission
ALLOWED_HOSTS = ['my.domain.jp']
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions',
]
#Omission
Le serveur de développement Django est généralement démarré avec runserver, mais le serveur HTTPS est démarré avec runserver_plus. Spécifiez le fichier de certificat du serveur et le fichier de clé privée comme arguments.
python manage.py runserver_plus --cert-file ./fullchain.pem --key-file ./privkey.pem 0:8000
Veuillez accéder à https://my.domain.jp:8000/ avec votre navigateur et vérifiez que vous pouvez vous connecter correctement avec HTTPS.
Ubuntu 18.04.4 LTS (Amazon EC2) Python 2.7.17
Faire exécuter le serveur de développement Django SSL / HTTPS | CentOS 7
Sécurité des documents Django dans Django
SECURE_PROXY_SSL_HEADER du document Django
Recommended Posts