[PYTHON] HTTPS mit Django und Let's Encrypt

Einführung

Ich benutze Python, was für mich selten ist. Ich musste bei der Arbeit eine Web-App in Python schreiben und benutzte Django. Es war mein erstes Mal, dass ich Django verwendete, aber ich fand, dass es ein unerwartet einfach zu verwendendes Framework ist. Mit einem guten Rahmen und freundlichen Tutorials sind die Unterschiede in den Sprachspezifikationen nicht allzu auffällig.

Ich habe HTTP bei der Arbeit erstellt, aber ich habe beschlossen, HTTPS mit Let's Encrypt zu testen, und diesen Artikel gestartet.

Erstellen Sie einen Server

Erstellen Sie einen AWS EC2-Server

Diesmal habe ich mich für Ubuntu entschieden. Ich denke, Amazon Linux basiert auf CentOS, aber die Version von SQLite ist niedrig und Django kann nicht gestartet werden.

django_https_1.PNG

--Wählen Sie Ubuntu 18.04 LTS als AMI-Typ.

django_https_2.PNG django_https_3.PNG

Danach werden die Einstellungen bestätigt und zum Starten auf "Start" geklickt.

django_https_4.PNG

Der private Schlüssel kann nur hier heruntergeladen werden und ohne ihn können Sie sich nicht beim Server anmelden.

--Wählen Sie eine Sicherheitsgruppe für die Instanzseite aus.

django_https_5.PNG

--Klicken Sie auf "Eingehende Regel bearbeiten".

django_https_6.PNG

--Klicken Sie auf "Regel hinzufügen", um HTTP und HTTPS hinzuzufügen, damit von "überall" auf sie zugegriffen werden kann. Fügen Sie außerdem ein weiteres "benutzerdefiniertes TCP" hinzu und fügen Sie die Portnummer 8000 hinzu.

django_https_7.PNG

――Nach dem Anmelden aktualisieren wir das Paket.

sudo apt update
sudo apt -y upgrade

Das Grub-Menü wird aktualisiert. Wählen Sie daher "Version des Paketverwalters installieren".

django_https_8.PNG

--Installieren Sie den Apache HTTP Server.

sudo apt -y install apache2
sudo systemctl start apache2

Legen Sie den Servernamen fest.

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>

Domainerwerb

Sie benötigen eine Domain, da Sie ein Serverzertifikat erhalten. In meinem Fall verwende ich einen DDNS-Dienst namens MyDNS. Wenn Sie Informationen benötigen, siehe unten.

Private MyDNS.JP

Erstellen eines Serverzertifikats mit Let's Encrypt

Installieren Sie certbot.

sudo apt -y install certbot python3-certbot-apache

Führen Sie den automatisierten Shell-Certbot von Let's Encrypt aus.

sudo certbot --apache

Das Zertifikat wird durch interaktive Eingabe der E-Mail-Adresse und des Servernamens wie unten gezeigt erstellt.

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

Überprüfen Sie mit dem Browser

Wenn Sie auf https://my.domain.jp/ zugreifen, wird der Standardbildschirm von apache2 angezeigt, und Sie können sehen, dass das von Let's Encrypt ausgestellte Serverzertifikat installiert ist.

django_https_9.PNG

Erstellen einer Django-Anwendung

Erstellen Sie eine Webanwendung mit Django.

Django Installation

Da Python standardmäßig installiert ist, installieren Sie pip und sqlite3.

sudo apt -y install python-pip sqlite3

Installieren Sie die OpenSSL-Python-Erweiterung.

pip install pyOpenSSL

Dann installieren Sie Django.

sudo pip install Django

Django Extensions

Installieren Sie Django Extensions, um Ihren Django-Entwicklungsserver HTTPS-kompatibel zu machen.

pip install django-extensions

Werkzeuginstallation

pip install Werkzeug

Erstellen eines Django-Projekts

Erstellen Sie ein Projekt.

django-admin startproject letsencrypt
cd letsencrypt

Kopieren Sie das Let's Encrypt-Serverzertifikat und den privaten Schlüssel in Ihren Projektordner.

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

Aktivieren Sie Django-Erweiterungen.

vi letsencrypt/settings.py

Fügen Sie 'jango_extensions' am Ende von INSTALLED_APPS hinzu. Fügen Sie außerdem den Hostnamen zu ALLOWED_HOSTS hinzu, wenn Sie den Zugriff über den Servernamen zulassen möchten.

#Unterlassung
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',
]
#Unterlassung

Serverstart

Der Django-Entwicklungsserver wird normalerweise mit runserver gestartet, der HTTPS-Server jedoch mit runserver_plus. Geben Sie die Serverzertifikatsdatei und die private Schlüsseldatei als Argumente an.

python manage.py runserver_plus --cert-file ./fullchain.pem --key-file ./privkey.pem 0:8000

Funktionsprüfung

Bitte greifen Sie mit Ihrem Browser auf https://my.domain.jp:8000/ zu und überprüfen Sie, ob Sie eine korrekte Verbindung mit HTTPS herstellen können.

django_https_10.PNG

Bestätigungsumgebung

Ubuntu 18.04.4 LTS (Amazon EC2) Python 2.7.17

Referenzierte Site

Machen Sie Django Development Server Runserver zu SSL / HTTPS | CentOS 7

Django-Dokumentensicherheit in Django

SECURE_PROXY_SSL_HEADER des Django-Dokuments

Recommended Posts

HTTPS mit Django und Let's Encrypt
HTTPS-Servereinstellungen von Django Project: Verschlüsseln
SSL-fähige mehrere Sites auf einem Server mit nginx und Let's Encrypt
Versuchen wir es mit gRPC mit Go und Docker
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Ramen-Kartenerstellung mit Scrapy und Django
Internationalisierung mit Django
Domainregistrierung und HTTPS-Konvertierung der mit CodeStar mit Route53 erstellten Django-App
CRUD mit Django
Generieren und veröffentlichen Sie Dummy-Bilddaten mit Django
Django: User Agent aufzeichnen und mit Admin verwalten
Lassen Sie uns Django und Apache (httpd) auf dem Mac integrieren! !!
Lassen Sie uns EV3-Motoren und -Sensoren mit Python steuern
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 1] ~ Django-Setup ~ eine nervenschwächende App erstellen
Authentifizieren Sie Google mit Django
Lassen Sie uns die Matrix transponieren und die Matrizen mit numpy multiplizieren.
Django 1.11 wurde mit Python3.6 gestartet
Laden Sie Dateien mit Django hoch
Entwicklungsverdauung mit Django
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Verwenden Sie Gentelella mit Django
Twitter OAuth mit Django
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Erste Schritte mit Django 1
Mail mit Django senden
Datei-Upload mit Django
Verwenden Sie WENIGER mit Django
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
Pooling mechanisieren mit Django
Verwenden Sie MySQL mit Django
Mit und ohne WSGI
Django ab heute
Erste Schritte mit Django 2
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Erstellen Sie eine Authentifizierungsfunktion mit django-allauth und CustomUser in Django
Lassen Sie uns word2vec mit Chainer verschieben und den Lernfortschritt sehen
Bei mir cp und Subprocess
Ver- und Entschlüsselung mit Python
Spielen wir mit der 4. Dimension der 4. Dimension
Spielen wir mit Amedas Daten - Teil 1
Arbeiten Sie mit tkinter und Maus
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Python und Hardware-Verwenden von RS232C mit Python-
Erstellen Sie eine API mit Django
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Stellen Sie Django serverlos mit Lambda bereit
Python3 + Django ~ Mac ~ mit Apache
Erste Schritte mit Python Django (1)
Erstellen Sie eine Homepage mit Django
Machen wir Othello mit wxPython
Fangen Sie mit Django an! ~ Tutorial ④ ~
Spielen wir mit Amedas Daten - Teil 4
Erste Schritte mit Python Django (4)
Erstellen Sie eine Webanwendung mit Django
Erste Schritte mit Python Django (3)