Abarone.it Logo

Come configurare SSL con Django e Apache

Https facile con let's encrypt

Introduzione

Google ha dichiarato che da Gennaio 2017 il browser Chrome, usato da circa il 75% dei navigatori web, mostrerà la scritta “SITO NON SICURO” nella barra degli indirizzi accanto ai siti che non utilizzano il protocollo https.

Pertanto su tutti i siti dove non è attivo il certificato di protezione, l’https sarà barrato in rosso.

L’obiettivo principale di Google è quello di far utilizzare il certificato di protezione SSL a tutti i webmaster. Attualmente necessitano maggiormente della protezione tutti quei siti in cui avvengono transazioni di denaro, ma in futuro verrà esteso a tutti i siti web, per una protezione maggiore dei dati sensibili e in generale per rendere il web più sicuro contro attacchi hakers.
Cripteremo il nostro sito utilizzando un'autorità di certificazione chiamata Let's Encrypt , un'iniziativa aperta e gratuita che mira a rendere onnipresente la crittografia online. Il processo di crittografia può essere un po 'complicato, quindi l'ho diviso in 5 passaggi:

  1. Aggiungendo Let's Encrypt support a Django
  2. Installazione ed esecuzione di Certbot
  3. Dimostrare la proprietà del sito con la sfida ACME
  4. Generazione del certificato di sicurezza con Certbot

1. Aggiungiamo Let's Encrypt a Django

Prima di tutto, è importante capire come funziona Let's Encrypt. Quando si richiede un certificato di sicurezza, è necessario dimostrare di essere realmente il proprietario del sito. Questa è chiamata una sfida ACME .

La sfida ACME implica che un url chiave di sfida sul tuo sito restituisca una risposta chiave di sfida . Sia la chiave che la risposta sono uniche e sono fornite da Let's Encrypt.

Aggiungeremo il supporto per le sfide ACME alla nostra applicazione utilizzando la libreria django-letsencrypt di Urda .

La libreria è abbastanza semplice e consente di aggiungere le coppie di chiavi e risposte attraverso l'ambiente di amministrazione Django. Questo esporrà l'url necessario per dimostrare la tua proprietà.

Utilizzando pip , eseguire i seguenti comandi per aggiornare l'ambiente Python ei requisiti:

  1. pip installa django-letsencrypt
  2. pip freeze > requirements.txt

In settings.py , aggiungi letsencrypt alle tue app installate:

  1. INSTALLED_APPS = [
  2. ... ,
  3. 'letsencrypt' ,
  4. ... ,
  5. ]

nfine, esporre gli URL della chiave di verifica aggiornando urls.py con il seguente indirizzo:

  1. urlpatterns = [
  2. ... ,
  3. url ( r '^ . well-known /' , include ( 'letsencrypt.urls' )),
  4. ... ,
  5. ]

2. Installazione ed esecuzione di Certbot

Successivamente installiamo Certbot , il client che recupera il certificato da Let's Encrypt.

Sto usando apache e pip, il che rende l'installazione semplice. Apri un terminale ed esegui:

preparare installare certbot
Nel terminale eseguire il seguente comando e seguire le istruzioni.

  1. sudo certbot certonly --manual

CertBot chiederà alcune delle tue informazioni, inclusa la tua email e il nome del dominio .

Alla fine produrrà un mucchio di testo, la maggior parte non pertinente alla nostra situazione. Soprattutto, produrrà qualcosa seguendo queste linee:

  1. Create a file containing just this data:
  2. CHALLENGE-KEY
  3. And make it available on your web server at this URL:
  4. http://dominio/.well-known/acme-challenge/CHALLENGE-RESPONSE

Per motivi di leggibilità, ho sostituito gli hash delle chiavi e delle risposte con CHALLENGE-RESPONSE e CHALLENGE-KEY . In pratica questi saranno degli hash complicati, che aggiungerai al tuo back-end.
*ricordarsi di sostituire la parola dominio col il proprio sito web

3. Dimostrare la proprietà con ACME

Nell'amministratore di Django, vai alla nuova sezione Let's Encrypt e aggiungi una nuova richiesta ACME.

Incolla la CHALLENGE-KEY e CHALLENGE-RESPONSE nei campi corrispondenti e salva la voce.
L'URL della sfida dovrebbe ora essere visibile e corretto.

4. Generazione del certificato di sicurezza con Certbot

Tornare al terminale e continuare premendo enter. CertBot ora tenterà di accedere all'URL della richiesto. In caso di successo, verrà generato quanto segue:

  1. Waiting for verification...
  2. Cleaning up challenges
  3. IMPORTANT NOTES:
  4. - Congratulations! Your certificate and chain have been saved at:
  5. /etc/letsencrypt/live/dominio/fullchain.pem
  6. Your key file has been saved at:
  7. /etc/letsencrypt/live/dominio/privkey.pem
  8. Your cert will expire on 2019-04-04. To obtain a new or tweaked
  9. version of this certificate in the future, simply run certbot
  10. again. To non-interactively renew *all* of your certificates, run
  11. "certbot renew"
  12. - If you like Certbot, please consider supporting our work by:
  13. Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
  14. Donating to EFF: https://eff.org/donate-le

Rinnovo del certificato

Let's Encrypt emette certificati validi per 90 giorni e ti invierà un'e-mail quando stanno per scadere. Dato che hai tutto configurato, è facile (ma non ideale) fare manualmente.

Per rinnovarlo automaticamente entrare nel terminale e digitare:

  1. certbot renew

Congratulazioni!

Il tuo sito dovrebbe essere crittografato.

barone.antonio@libero.it