Δωρεάν πιστοποιητικά HTTPS με το Let's Encrypt
Το Let's Encrypt είναι αρχή πιστοποίησης που εκδίδει δωρεάν πιστοποιητικά HTTPS για το domain σας. Στο VPS σας μπορείτε να πάρετε πιστοποιητικό με λίγες εντολές χρησιμοποιώντας το Certbot, ή χωρίς καμία εντολή με το Caddy, και τα δύο το ανανεώνουν μόνα τους. Υπάρχουν δύο προϋποθέσεις: το domain πρέπει να δείχνει στη διεύθυνση IP του server σας και οι θύρες 80 και 443 πρέπει να είναι ανοιχτές απ' έξω.
Γιατί χρειάζεστε HTTPS;
Το HTTPS κρυπτογραφεί την κίνηση ανάμεσα στον browser και στον server. Τρίτοι στο δίκτυο δεν μπορούν να διαβάσουν τον κωδικό σε μια φόρμα σύνδεσης ή τα στοιχεία μιας παραγγελίας. Οι browsers μπορούν να εμφανίζουν προειδοποίηση «μη ασφαλές» σε ιστότοπους χωρίς HTTPS. Ένα πιστοποιητικό Let's Encrypt είναι δωρεάν, οπότε δεν υπάρχει πια καλός λόγος να παραλείψετε το HTTPS.
Πριν ξεκινήσετε
- Η εγγραφή A του domain πρέπει να δείχνει τη διεύθυνση IP του server σας. Για να ελέγξετε, εκτελέστε
dig +short example.com. Το αποτέλεσμα πρέπει να είναι η διεύθυνση IP του server σας. - Οι θύρες 80 και 443 πρέπει να είναι ανοιχτές, γιατί η επικύρωση γίνεται στη θύρα 80 (HTTP-01). Αν χρησιμοποιείτε ufw, εκτελέστε
sudo ufw allow 80/tcpκαιsudo ufw allow 443/tcp. Αν ο server σας έχει ξεχωριστό firewall στο πάνελ του, ελέγξτε και εκεί τους κανόνες. - Αν το domain έχει εγγραφή AAAA (IPv6), πρέπει να δείχνει κι αυτή σε αυτόν τον server. Αν όχι, διαγράψτε την εγγραφή.
- Ο web server σας πρέπει να τρέχει και να γνωρίζει αυτό το domain.
Εγκατάσταση και έλεγχος με Certbot σε Nginx ή Apache
Οι επίσημες οδηγίες του Certbot συνιστούν το πακέτο snap. Βεβαιωθείτε ότι το snapd είναι εγκατεστημένο στον server (στο Ubuntu συνήθως είναι) και αφαιρέστε τυχόν παλαιότερο Certbot που εγκαταστάθηκε μέσω apt.
- Εγκαταστήστε το Certbot:
sudo snap install --classic certbot - Κάντε την εντολή διαθέσιμη παντού:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - Αποκτήστε το πιστοποιητικό και εγκαταστήστε το στον web server. Εκτελέστε
sudo certbot --nginxγια Nginx ήsudo certbot --apacheγια Apache. - Απαντήστε στις ερωτήσεις: τη διεύθυνση email σας, για ποια domains θέλετε το πιστοποιητικό και αν θα γίνεται ανακατεύθυνση από HTTP σε HTTPS.
- Δοκιμάστε την ανανέωση:
sudo certbot renew --dry-run
Αν θέλετε μόνο να αποκτήσετε το πιστοποιητικό και να κάνετε μόνοι σας τις ρυθμίσεις, εκτελέστε sudo certbot certonly --nginx. Το πακέτο Certbot προσθέτει μόνο του μια προγραμματισμένη εργασία (cron ή systemd timer) και τη βλέπετε στο αποτέλεσμα του systemctl list-timers. Το sudo certbot certificates εμφανίζει τα πιστοποιητικά σας και τις ημερομηνίες λήξης τους. Το Certbot ανανεώνει ένα πιστοποιητικό όταν η διάρκειά του κοντεύει να τελειώσει και εσείς δεν κάνετε τίποτα. Η ανανέωση μπορεί παρ' όλα αυτά να αποτύχει μια μέρα (για παράδειγμα λόγω κανόνα firewall), οπότε εκτελείτε το --dry-run πού και πού.
Για να ελέγξετε το πιστοποιητικό, κοιτάξτε πρώτα το εικονίδιο του λουκέτου στη γραμμή διευθύνσεων του browser. Για να δείτε την ημερομηνία λήξης με εντολή, εκτελέστε:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
Η γραμμή notAfter στο αποτέλεσμα είναι η ημερομηνία λήξης του πιστοποιητικού. Αν δεν χρησιμοποιείτε την ανακατεύθυνση που προσθέτει το Certbot, κάντε μόνοι σας ανακατεύθυνση από HTTP σε HTTPS. Στο Nginx, προσθέστε τη γραμμή return 301 https://$host$request_uri; στο μπλοκ server που ακούει στη θύρα 80.
Με Caddy και χωρίς εντολές
Αν χρησιμοποιείτε Caddy, δεν χρειάζεται να εγκαταστήσετε τίποτα επιπλέον. Για ένα domain που υπάρχει στη διαμόρφωσή του, το Caddy αποκτά το πιστοποιητικό από το Let's Encrypt ή το ZeroSSL, το ανανεώνει και ανακατευθύνει το HTTP σε HTTPS. Σύμφωνα με την επίσημη τεκμηρίωσή του, οι εγγραφές A και AAAA του domain πρέπει να δείχνουν στον server, οι θύρες 80 και 443 πρέπει να είναι προσβάσιμες απ' έξω και ο φάκελος δεδομένων του Caddy πρέπει να είναι μόνιμος και εγγράψιμος. Αν τρέχετε το Caddy σε Docker, προσαρτήστε αυτόν τον φάκελο σε volume. Διαφορετικά τα πιστοποιητικά εξαφανίζονται όταν διαγραφεί το container και η νέα αίτησή τους μπορεί να προσκρούσει σε όριο ρυθμού.
Πιστοποιητικά wildcard
Ένα πιστοποιητικό wildcard (*.example.com) καλύπτει όλα τα subdomains με ένα πιστοποιητικό και αποκτάται μόνο με επικύρωση DNS-01. Αυτή η επικύρωση δεν χρησιμοποιεί τη θύρα 80. Ζητά να βάλετε μια εγγραφή TXT στο DNS του domain σας. Γι' αυτό ο πάροχος DNS σας χρειάζεται API και αποθηκεύετε το κλειδί API στον server. Η τεκμηρίωση του Let's Encrypt χαρακτηρίζει επικίνδυνη την αποθήκευση τέτοιων κλειδιών σε web server. Αν δεν χρειάζεστε wildcard, η απόκτηση πιστοποιητικών για μεμονωμένα domains με HTTP-01 είναι απλούστερη και δεν απαιτεί αποθήκευση κλειδιού DNS.
Συνηθισμένα σφάλματα
| Σύμπτωμα | Πιθανή αιτία | Διόρθωση |
|---|---|---|
| Η επικύρωση αποτυγχάνει, το domain δεν βρέθηκε | Η εγγραφή A δείχνει λάθος IP ή δεν έχει διαδοθεί ακόμη | Ελέγξτε την IP με dig +short example.com και περιμένετε |
| Timeout | Η θύρα 80 είναι κλειστή | Ανοίξτε τη 80 στο ufw και στο firewall του πάνελ, αν έχετε |
| Η επικύρωση περνά κάποιες φορές και αποτυγχάνει άλλες | Η εγγραφή AAAA δείχνει σε άλλον server | Διορθώστε ή διαγράψτε την εγγραφή AAAA |
| Σφάλμα ορίου ρυθμού | Πάρα πολλές προσπάθειες | Χρησιμοποιήστε --dry-run για δοκιμές και δείτε την επίσημη σελίδα για τα όρια |
| Η ανανέωση δεν τρέχει | Δεν υπάρχει προγραμματισμένη εργασία ή ο web server μπλοκάρει τη θύρα 80 | Το sudo certbot renew --dry-run δείχνει το σφάλμα |
Το μήνυμα σφάλματος συνήθως λέει ποια επικύρωση απέτυχε και ποια διεύθυνση του server σας προσπάθησε να φτάσει το Let's Encrypt. Διαβάστε το μήνυμα όπως είναι. Η απάντηση βρίσκεται συχνά ακριβώς εκεί.
Σύμφωνα με την επίσημη σελίδα του Let's Encrypt, υπάρχει όριο 5 πιστοποιητικών την εβδομάδα για το ίδιο σύνολο ονομάτων domain και 5 αποτυχημένων επικυρώσεων την ώρα για το ίδιο όνομα domain. Γι' αυτό χρησιμοποιείτε --dry-run όσο πειραματίζεστε. Δοκιμάζει την ανανέωση στο περιβάλλον staging και δεν ξοδεύει το πραγματικό σας όριο.
Στις έτοιμες εφαρμογές του Seturack
Οι έτοιμες εφαρμογές (WordPress, Nextcloud και άλλες) ανοίγουν μέσω HTTPS σε διεύθυνση sslip.io που προκύπτει από τη διεύθυνση IP σας, οπότε δεν χρειάζεται όνομα domain. Όταν συνδέετε το δικό σας domain, το Caddy αποκτά ξανά το πιστοποιητικό και δεν εγκαθιστάτε τίποτα επιπλέον. Τα βήματα για να ενημερώσετε το Caddy και την εφαρμογή για το domain βρίσκονται σε αυτό το άρθρο βοήθειας.
Σχόλια0
Δεν υπάρχουν ακόμη σχόλια
Μοιραστείτε πρώτοι τις σκέψεις σας.
Συνδεθείτε ή εγγραφείτε για να αφήσετε σχόλιο.