Android

Ασφαλίστε το nginx με την κρυπτογράφηση του debian 10 linux

Application Security with NGINX

Application Security with NGINX

Πίνακας περιεχομένων:

Anonim

Το Let's Encrypt είναι μια ελεύθερη, αυτοματοποιημένη και ανοιχτή αρχή πιστοποίησης που αναπτύχθηκε από την ομάδα ασφάλειας ISRG που παρέχει δωρεάν πιστοποιητικά SSL.

Τα πιστοποιητικά που εκδίδονται από το Let's Encrypt εμπιστεύονται όλα τα μεγάλα προγράμματα περιήγησης και ισχύουν για 90 ημέρες από την ημερομηνία έκδοσης.

Αυτό το σεμινάριο δείχνει πώς να εγκαταστήσετε ένα ελεύθερο Let's Encrypt SSL certificate στο Debian 10, το Buster που τρέχει το Nginx ως διακομιστής ιστού. Θα δείξουμε επίσης πώς να ρυθμίσουμε το Nginx ώστε να χρησιμοποιεί το πιστοποιητικό SSL και να ενεργοποιεί το HTTP / 2.

Προϋποθέσεις

Βεβαιωθείτε ότι πληρούνται οι ακόλουθες προϋποθέσεις πριν προχωρήσετε στον οδηγό:

  • Συνδεθήκατε ως root ή χρήστη με δικαιώματα sudo.Ο τομέας για τον οποίο θέλετε να αποκτήσετε το πιστοποιητικό SSL πρέπει να δείχνει στον δημόσιο διακομιστή IP σας. Θα χρησιμοποιήσουμε το example.com .Nginx.

Εγκατάσταση του Certbot

Θα χρησιμοποιήσουμε το εργαλείο certbot για να λάβουμε και να ανανεώσουμε τα πιστοποιητικά.

Το Certbot είναι ένα πλήρως εξοπλισμένο και εύκολο στη χρήση εργαλείο που αυτοματοποιεί τις εργασίες για την απόκτηση και ανανέωση των πιστοποιητικών SSL SSL και τη διαμόρφωση των εξυπηρετητών ιστού για τη χρήση των πιστοποιητικών.

Το πακέτο certbot περιλαμβάνεται στα προεπιλεγμένα αποθετήρια του Debian. Εκτελέστε τις ακόλουθες εντολές για την εγκατάσταση του certbot:

sudo apt update sudo apt install certbot

Δημιουργία ομάδας Dh (Diffie-Hellman)

Η ανταλλαγή πλήκτρων Diffie-Hellman (DH) είναι μια μέθοδος ασφαλούς ανταλλαγής κρυπτογραφικών κλειδιών πάνω σε ένα μη ασφαλισμένο κανάλι επικοινωνίας.

Θα δημιουργήσουμε ένα νέο σύνολο παραμέτρων 2048 bit DH για την ενίσχυση της ασφάλειας:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Μπορείτε επίσης να αλλάξετε το μέγεθος μέχρι 4096 bits, αλλά η παραγωγή μπορεί να διαρκέσει περισσότερο από 30 λεπτά, ανάλογα με την εντροπία του συστήματος.

Αποκτώντας πιστοποιητικό SSL

Για να αποκτήσετε ένα πιστοποιητικό SSL για τον τομέα, πρόκειται να χρησιμοποιήσουμε την προσθήκη Webroot. Λειτουργεί με τη δημιουργία ενός προσωρινού αρχείου για την επικύρωση του ζητούμενου τομέα στον κατάλογο ${webroot-path}/.well-known/acme-challenge . Ο διακομιστής "Ας κρυπτογραφήσει" κάνει αιτήσεις HTTP στο προσωρινό αρχείο για να επιβεβαιώσει ότι ο ζητούμενος τομέας επιλύεται στο διακομιστή όπου τρέχει το certbot.

Θα χαρτογραφήσουμε όλα τα αιτήματα HTTP για .well-known/acme-challenge σε ένα μόνο κατάλογο, /var/lib/letsencrypt .

Εκτελέστε τις ακόλουθες εντολές για να δημιουργήσετε τον κατάλογο και να το καταστήσετε εγγράψιμο για τον διακομιστή Nginx:

mkdir -p /var/lib/letsencrypt/.well-known chgrp www-data /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt

Για να αποφύγουμε την αναπαραγωγή κώδικα, θα δημιουργήσουμε δύο αποσπάσματα που θα συμπεριληφθούν σε όλα τα αρχεία μπλοκ διακομιστή Nginx.

Ανοίξτε τον επεξεργαστή κειμένου και δημιουργήστε το πρώτο απόσπασμα, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }

Το δεύτερο snippet ssl.conf περιλαμβάνει τα τσιπς που συνιστώνται από το Mozilla, επιτρέπει τη σύνδεση με το OCSP, το HTTP Strict Transport Security (HSTS) και επιβάλλει ελάχιστες κεφαλίδες HTTP με εστίαση στην ασφάλεια.

sudo nano /etc/nginx/snippets/ssl.conf /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

Μόλις ολοκληρωθεί, ανοίξτε το αρχείο μπλοκ διακομιστή τομέα και συμπεριλάβετε το απόσπασμα letsencrypt.conf όπως φαίνεται παρακάτω:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Δημιουργήστε έναν συμβολικό σύνδεσμο στον κατάλογο sites-enabled για να ενεργοποιήσετε το μπλοκ διακομιστή τομέα:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Κάντε επανεκκίνηση της υπηρεσίας Nginx για να εφαρμοστούν οι αλλαγές:

sudo systemctl restart nginx

Είστε πλέον έτοιμοι να αποκτήσετε τα αρχεία πιστοποιητικών SSL εκτελώντας την ακόλουθη εντολή:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Αν το πιστοποιητικό SSL έχει ληφθεί με επιτυχία, θα εκτυπωθεί στο τερματικό σας το ακόλουθο μήνυμα:

IMPORTANT NOTES: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-02-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Επεξεργαστείτε το μπλοκ διακομιστή τομέα και συμπεριλάβετε τα αρχεία πιστοποιητικών SSL ως εξής:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

Η παραπάνω διαμόρφωση αναφέρει ότι η Nginx ανακατευθύνει από HTTP σε HTTPS και από www σε μη-www έκδοση.

Επανεκκινήστε ή επανατοποθετήστε την υπηρεσία Nginx για να εφαρμοστούν οι αλλαγές:

sudo systemctl restart nginx

Ανοίξτε τον ιστότοπό σας χρησιμοποιώντας το https:// και θα παρατηρήσετε ένα πράσινο εικονίδιο κλειδώματος.

Αυτόματη ανανέωση Ας κρυπτογραφήσουμε το πιστοποιητικό SSL

Τα πιστοποιητικά της Κρυπτογράφησης ισχύουν για 90 ημέρες. Για να ανανεώσουν αυτόματα τα πιστοποιητικά πριν λήξουν, το πακέτο certbot δημιουργεί ένα cronjob που τρέχει δύο φορές την ημέρα και ανανεώνει αυτόματα κάθε πιστοποιητικό 30 ημέρες πριν από τη λήξη του.

Κατά την ανανέωση, η υπηρεσία nginx πρέπει να φορτωθεί ξανά για να φορτώσει το πιστοποιητικό ο διακομιστής. Προσθέστε --renew-hook "systemctl reload nginx" στο αρχείο /etc/cron.d/certbot έτσι ώστε να μοιάζει με αυτό:

sudo nano /etc/cron.d/certbot /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Ελέγξτε τη διαδικασία αυτόματης ανανέωσης, εκτελώντας αυτήν την εντολή:

sudo certbot renew --dry-run

Εάν δεν υπάρχουν σφάλματα, σημαίνει ότι η διαδικασία ανανέωσης ήταν επιτυχής.

συμπέρασμα

Έχοντας ένα πιστοποιητικό SSL είναι απαραίτητη σήμερα. Ασφαλίζει τον ιστότοπό σας, αυξάνει τη θέση κατάταξης SERP και σας επιτρέπει να ενεργοποιήσετε το HTTP / 2 στο διακομιστή ιστού σας.

Σε αυτό το σεμινάριο, σας δείξαμε πώς μπορείτε να δημιουργήσετε και να ανανεώσετε πιστοποιητικά SSL χρησιμοποιώντας το σετ certbot. Σας έχουμε επίσης δείξει πώς μπορείτε να διαμορφώσετε το Nginx για να χρησιμοποιήσετε τα πιστοποιητικά.

Για να μάθετε περισσότερα σχετικά με την Certbot, επισκεφθείτε την τεκμηρίωση του Certbot.

nginx debian ας κρυπτογραφήσουμε το certbot ssl