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


Ακολουθώντας το προηγούμενο σεμινάριο Let's Encrypt σχετικά με το Apache SSL, σε αυτό το άρθρο θα συζητήσουμε πώς να δημιουργήσετε και να εγκαταστήσετε ένα δωρεάν πιστοποιητικό SSL/TLS που εκδόθηκε από την Let's Encrypt CA για διακομιστή ιστού Nginx σε Ubuntu ή Debian.

Διαβάστε επίσης
  1. Ασφαλίστε τον Apache με το Free Let’s Encrypt σε Ubuntu και Debian
  2. Εγκαταστήστε το Let’s Encrypt SSL για ασφαλή Apache σε RHEL και CentOS
Δοκιμαστικό Περιβάλλον Δείγματος

Απαιτήσεις

  1. Ένας καταχωρημένος τομέας με έγκυρες εγγραφές DNS A για να οδηγεί πίσω στη διεύθυνση IP του διακομιστή σας.
  2. Ένας εγκατεστημένος διακομιστής ιστού Nginx με ενεργοποιημένα SSL και Vhost, σε περίπτωση που σκοπεύετε να φιλοξενήσετε πολλούς τομείς ή υποτομείς.

Βήμα 1: Εγκατάσταση του διακομιστή Web Nginx

1. Στο πρώτο βήμα εγκαταστήστε τον διακομιστή ιστού Nginx, εάν δεν είναι ήδη εγκατεστημένος, εκδίδοντας την παρακάτω εντολή:

sudo apt-get install nginx

Βήμα 2: Δημιουργήστε ένα πιστοποιητικό Let’s Encrypt SSL για το Nginx

2. Πριν δημιουργήσετε ένα δωρεάν πιστοποιητικό SSL/TLS, εγκαταστήστε το λογισμικό Let's Encrypt στην ιεραρχία συστήματος αρχείων /usr/local/ με τη βοήθεια του git εκδίδοντας τις παρακάτω εντολές:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Παρόλο που η διαδικασία λήψης Πιστοποιητικού για το Nginx είναι αυτοματοποιημένη, μπορείτε να δημιουργήσετε και να εγκαταστήσετε μη αυτόματα ένα δωρεάν πιστοποιητικό SSL για το Nginx χρησιμοποιώντας την προσθήκη Let’s Encrypt Standalone.

Αυτή η μέθοδος απαιτεί ότι η θύρα 80 δεν πρέπει να χρησιμοποιείται στο σύστημά σας για σύντομο χρονικό διάστημα, ενώ ο πελάτης Let’s Encrypt επικυρώνει την ταυτότητα του διακομιστή πριν από τη δημιουργία του πιστοποιητικού.

Σε περίπτωση που εκτελείτε ήδη το Nginx, σταματήστε την υπηρεσία εκδίδοντας την ακόλουθη εντολή.


sudo service nginx stop
OR
sudo systemctl stop nginx

Σε περίπτωση που εκτελείτε άλλη υπηρεσία που δεσμεύεται στη θύρα 80, σταματήστε και αυτήν την υπηρεσία.

4. Επιβεβαιώστε ότι η θύρα 80 είναι δωρεάν εκτελώντας την εντολή netstat:

sudo netstat -tlpn | grep 80

5. Τώρα ήρθε η ώρα να εκτελέσετε το letsencrypt για να αποκτήσετε ένα Πιστοποιητικό SSL. Μεταβείτε στον κατάλογο εγκατάστασης Let's Encrypt που βρίσκεται στη διαδρομή συστήματος /usr/local/letsencrypt και εκτελέστε την εντολή letsencrypt-auto παρέχοντας οπωσδήποτε τον <κώδικα Επιλογή >--standalone και σημαία -d για κάθε τομέα ή υποτομέα που θέλετε να δημιουργήσετε ένα πιστοποιητικό.

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. Εισαγάγετε τη διεύθυνση email που θα χρησιμοποιηθεί από το Let’s Encrypt για ανάκτηση χαμένου κλειδιού ή επείγουσες ειδοποιήσεις.

7. Συμφωνήστε με τους όρους της άδειας πατώντας το πλήκτρο Enter.

8. Τέλος, εάν όλα πήγαν επιτυχώς, ένα μήνυμα παρόμοιο με το παρακάτω στιγμιότυπο οθόνης θα πρέπει να εμφανιστεί στην κονσόλα του τερματικού σας.

Βήμα 3: Εγκαταστήστε το Let’s Encrypt SSL Certificate στο Nginx

9. Τώρα που δημιουργήθηκε το Πιστοποιητικό SSL σας, ήρθε η ώρα να διαμορφώσετε τον διακομιστή ιστού Nginx ώστε να το χρησιμοποιεί. Τα νέα πιστοποιητικά SSL τοποθετούνται στο /etc/letsencrypt/live/ κάτω από έναν κατάλογο με το όνομα του ονόματος τομέα σας. Εκτελέστε την εντολή ls για να παραθέσετε τα αρχεία πιστοποιητικού που εκδόθηκαν για τον τομέα σας.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. Στη συνέχεια, ανοίξτε το αρχείο /etc/nginx/sites-available/default με ένα πρόγραμμα επεξεργασίας κειμένου και προσθέστε το ακόλουθο μπλοκ μετά την πρώτη γραμμή που σχολιάστηκε που καθορίζει την αρχή του Μπλοκ SSL. Χρησιμοποιήστε το παρακάτω στιγμιότυπο οθόνης ως καθοδήγηση.

sudo nano /etc/nginx/sites-enabled/default

Απόσπασμα μπλοκ Nginx:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

Αντικαταστήστε τις τιμές των ονομάτων τομέα για πιστοποιητικά SSL ανάλογα.

11. Στο επόμενο βήμα δημιουργήστε έναν ισχυρό κρυπτογράφηση Diffie-Hellman στον κατάλογο /etc/nginx/ssl/ για να προστατεύσετε τον διακομιστή σας από την επίθεση Logjam εκτελώντας τις ακόλουθες εντολές.

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048

12. Τέλος, επανεκκινήστε το Nginx daemon για να αντικατοπτρίζονται οι αλλαγές.

sudo systemctl restart nginx

και δοκιμάστε το πιστοποιητικό SSL σας μεταβαίνοντας στην παρακάτω διεύθυνση URL.

https://www.ssllabs.com/ssltest/analyze.html

Βήμα 4: Αυτόματη ανανέωση Let’s Encrypt Nginx Certificates

13. Τα πιστοποιητικά που εκδίδονται από την Let’s Encrypt CA ισχύουν για 90 ημέρες. Για αυτόματη ανανέωση των αρχείων πριν από την ημερομηνία λήξης, δημιουργήστε ssl-renew.sh σενάριο bash στον κατάλογο /usr/local/bin/ με το ακόλουθο περιεχόμενο.

sudo nano /usr/local/bin/ssl-renew.sh

Προσθέστε το ακόλουθο περιεχόμενο στο αρχείο ssl-renew.sh.

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

Αντικαταστήστε τη μεταβλητή --webroot-path για να ταιριάζει με τη ρίζα του εγγράφου Nginx. Βεβαιωθείτε ότι το σενάριο είναι εκτελέσιμο εκδίδοντας την ακόλουθη εντολή.

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. Τέλος, προσθέστε μια εργασία cron για να εκτελείτε το σενάριο κάθε δύο μήνες τα μεσάνυχτα, προκειμένου να διασφαλίσετε ότι το πιστοποιητικό σας θα ενημερωθεί σε περίπου 30 ημέρες πριν τη λήξη του.

sudo crontab -e

Προσθέστε την ακόλουθη γραμμή στο κάτω μέρος του αρχείου.

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

Αυτό είναι! Ο διακομιστής Nginx σας εξυπηρετεί πλέον περιεχόμενο SSL χρησιμοποιώντας ένα δωρεάν πιστοποιητικό Let’s Encrypt SSL.