Πώς να ασφαλίσετε τον Nginx με Let's Encrypt στο Debian 8

set-up-nginx-with-lets-encrypt

Τα πιστοποιητικά SSL χρησιμοποιούνται απο τους web servers για να κρυπτογραφούν την μεταφορά πακέτων ανάμεσα σε client-server(HTTPS σύνδεση) .Το Let’s Encrypt είναι μια αρχή πιστοποίησης (CA) που επιτρέπει την εγκατάσταση πιστοποιητικών SSL/TLS . Τα  πλεονεκτήματα του Let’s Encrypt είναι οτι πρώτον είναι δωρεάν , και δεύτερον , όλη η διαδικασία εγκατάστασης μπορεί να αυτοματοποιηθεί  , κάτι που το κάνει αρκετά εύκολο στη χρήση.

Μαζί θα δούμε πως μπορούμε να αυτοματοποίησουμε τη διαδικασία λήψης ενός πιστοποιητικού  και να το χρησιμοποιήσουμε με τον Nginx σε Debian 8 . Επίσης θα δούμε πώς να κάνουμε το πιστοποιητικό SSL να ανανεώνεται αυτόματα .

Για να ξεκινήσουμε , πρέπει να έχουμε :

  • Εγκατεστμένο το Debian 8 , και έναν non-root χρήστη με sudo δικαιώματα .
  • Εγκατεστημένο τον Nginx Web Server .
  • Ένα η περισσότερα domain names με τα οποία θα χρησιμοποιηθεί το πιστοποιητικό .Επιπλέον πρέπει να γίνει το configuration του nginx ώστε το domain name να δείχνει στην public IP του server .

Εγκατάσταση του Let’s Encrypt Client(Certbot)

Για να γίνει λήψη ενος πιστοποιητικού , πρέπει πρώτα να εγκαταστήσουμε το Let’s Encrypt Client ή αλλιώς Certbot στον server μας . Θα χρησιμοποιήσουμε την -apt get , αλλά πρώτα πρέπει να εισάγουμε το repository . 

sudo add-apt-repository ppa:certbot/certbot

sudo apt-get update

sudo apt-get install python-certbot-apache

Αν όλα πάνε καλά το Certbot είναι έτοιμο για χρήση .

Ρύθμιση του Nginx

Το Certbot μπορεί να ρυθμίσει αυτόματα το SSL για το Nginx, αλλά πρέπει να είναι σε θέση να βρει το σωστό block server στο config. Το κάνει αυτό αναζητώντας μια οδηγία server_name που αντιστοιχεί στον τομέα στον οποίο ζητάμε ένα πιστοποιητικό. Αν ξεκινάτε με μια νέα εγκατάσταση του Nginx, μπορείτε να ενημερώσετε το προεπιλεγμένο αρχείο ρυθμίσεων: 

sudo vi /etc/nginx/sites-available/default

Βρείτε την υπάρχουσα γραμμή server_name:

/etc/nginx/sites-available/default

server_name localhost;

Αντικαταστήστε το localhost με το όνομα τομέα σας:

/etc/nginx/sites-available/default

server_name example.com www.example.com;

Αποθηκεύστε το αρχείο και κλείστε το. Επαληθεύστε τη σύνταξη των τροποποιήσεων διαμόρφωσης με:

sudo nginx -t

Εάν αυτό τρέχει χωρίς σφάλματα, επαναλάβετε τη φόρτωση του Nginx για να φορτώσετε το νέο configuration: 

sudo service nginx reload

Το Certbot θα πρέπει να είναι τώρα σε θέση να βρει το σωστό μπλοκ διακομιστή και να το ενημερώσει. Τώρα θα ενημερώσουμε το τείχος προστασίας για να επιτρέψουμε το  HTTPS traffic.

 

Ρύθμιση του Firewall

Αν έχουμε ενεργοποίησει το ufw firewall  , πρέπει να το ρυθμίσουμε ώστε να επιτρέπει https traffic .

Αρχικά βλέπουμε τις τωρινές του ρυθμίσεις :

sudo ufw status

Το πιο πιθανό είναι να επιτρέπουν μόνο http traffic 

Output

Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Για να επιτρέψουμε HTTP traffic πρέπει να διαγράψουμε το προφιλ Nginx HTTP και να προσθέσουμε το προφίλ Nginx Full :
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
 

Εγκατάσταση του πιστοποιητικού SSL

Το Certbot παρέχει διάφορους τρόπους για την απόκτηση πιστοποιητικών SSL μέσω διαφόρων πρόσθετων στοιχείων. Το plugin Nginx θα φροντίσει να αναδιαμορφώσει το Nginx και να φορτώσει ξανά το config όποτε είναι απαραίτητο: 

sudo certbot --nginx -d example.com -d www.example.com

Αυτό τρέχει certbot με το plugin -nginx, χρησιμοποιώντας -d για να καθορίσουμε τα ονόματα στα οποία θέλουμε να είναι έγκυρο το πιστοποιητικό.

Αφού εκτελέσουμε την παραπάνω εντολή θα μας ζητηθούν κάποιες πληροφορίες όπως πχ το email μας για επαναφορά μυσιτκού κλειδιού , αν θέλουμε μόνιμα το http η να υπάρχει εναλλαγή ανάμεσα σε http και https κλπ .

Οταν τελειώσει όλη η διαδικασία τα αρχεία του πιστοποιητικού , λογικά θα είναι στον φάκελο /etc/letsencrypt/live . 

Για να δούμε ότι όλα πήγαν καλά , επισκεφτόμαστε τον ιστότοπο μας γράφοντας https: // και παρατηρούμε την ένδειξη ασφαλείας του προγράμματος περιήγησης. Θα πρέπει να μας λεει  ότι ο ιστότοπος είναι σωστά ασφαλισμένος, (συνήθως με μια πράσινη κλειδαριά).

 

Ρύθμιση της αυτόματης ανανέωσης

Τα πιστοποιητικά του Let’s Encrypt διαρκούν μόνο για 90 μέρες . Για αυτό θα χρησιμοποιήσουμε το cron , ένα service των συστημάτων Linux , που τρέχει περιοδικές εργασίες , για να ανανεώνουμε το πιστοποιητικό αυτόματα .

Αρχικά θα ανοίξουμε το crontab , ένα text file στο οποίο γράφουμε τις εργασίες που θέλουμε να εκτελέσει το cron .

sudo crontab -e 

Αφού ανοίξει ο text editor  θα προσθέσουμε την ακόλουθη γραμμή

15 3 * * * /usr/bin/certbot renew --quiet

Η παραπάνω γραμμή λέει στο certbot να κάνει ανανέωση κάθε μέρα στις 3:15 μ.μ. Προφανώς αυτό είναι ένα παράδειγμα , και μπορούμε να διαλέξουμε ότι ώρα θέλουμε .

Το επίθεμα --quiet δηλώνει στο certbot να μην περίμενει είσοδο απο το χρήστη για να ξεκινήσει τη διαδικασία , αλλά ούτε και να βγάλει κάποια έξοδο .

Συνοψίζοντας , όλη η διαδικασία που περιγράψαμε είναι μια καλή αρχή για να χρησιμοποιήσετε κρυπτογράφηση στον ιστοχώρο σας και να αυξήσετε την ασφάλεια του . Για περισσότερες πληροφορίες σχετικά με το Certbot και την Let’s Encrypt μπορείτε να δείτε το επίσημο documentation εδώ .

ΣΥΝΔΕΣΗ

Αίτηση επικοινωνίας

ΠΑΝΩ