Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

https με Let's Encrypt

Ενότητα 7: Domain, web server και https · Χρόνος ανάγνωσης: 12 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να αποκτήσετε με το certbot ένα δωρεάν πιστοποιητικό από τη Let's Encrypt για το nginx, να ανακατευθύνετε το http σε https, να ελέγξετε την αυτόματη ανανέωση και να λύσετε τα πιο συνηθισμένα σφάλματα κατά την αίτηση.

Βασικές έννοιες: πιστοποιητικό, αρχή έκδοσης πιστοποιητικών (CA), ACME, Let's Encrypt, επικύρωση domain, HTTP-01, DNS-01, TLS-ALPN-01, certbot, ανανέωση, certbot renew --dry-run, διάρκεια ισχύος, ARI, rate limits, staging, CAA, ανακατεύθυνση σε https

Γιατί https και τι αποδεικνύει ένα πιστοποιητικό

Χωρίς https όλα όσα ανταλλάσσονται μεταξύ browser και server ταξιδεύουν μη κρυπτογραφημένα στο δίκτυο: κωδικοί πρόσβασης, φόρμες, cookies. Οποιοσδήποτε βρίσκεται στη διαδρομή (ένα δημόσιο wifi, ένας παραβιασμένος router) μπορεί να τα διαβάσει ή να τα αλλοιώσει. Γι' αυτό οι browsers επισημαίνουν τους ιστότοπους http ως «μη ασφαλείς», και ορισμένες λειτουργίες είναι διαθέσιμες μόνο μέσω https. Για ένα θησαυροφυλάκιο κωδικών όπως το Vaultwarden (μάθημα 9.4) το https είναι μάλιστα υποχρεωτικό.

Το https χρησιμοποιεί TLS, και για αυτό ο server σας χρειάζεται ένα πιστοποιητικό: μια απόδειξη, υπογεγραμμένη από μια αρχή έκδοσης πιστοποιητικών (CA) που εμπιστεύονται οι browsers, ότι αυτό το κλειδί ανήκει σε αυτό το όνομα. Ένα συνηθισμένο πιστοποιητικό αποδεικνύει μόνο ότι ο αιτών διαχειρίζεται το όνομα domain (επικύρωση domain). Δεν λέει τίποτα για το ποιος είστε ή αν είστε αξιόπιστοι.

Η Let's Encrypt είναι μια δωρεάν CA που εκδίδει μόνο πιστοποιητικά επικυρωμένου domain, πλήρως αυτόματα μέσω του πρωτοκόλλου ACME. Ένα πρόγραμμα στον server σας (ο ACME client) ζητά το πιστοποιητικό, αποδεικνύει ότι διαχειρίζεται το όνομα, το εγκαθιστά και το ανανεώνει έγκαιρα. Αυτό το μάθημα χρησιμοποιεί το certbot, τον client του EFF. Το Caddy (μάθημα 7.4) έχει ενσωματωμένο ACME client.

Πώς αποδεικνύετε ότι διαχειρίζεστε το όνομα;

Η Let's Encrypt γνωρίζει τρία είδη δοκιμασιών (challenges):

ΔοκιμασίαΠώςΘύραWildcard (*.example.com)
HTTP-01τοποθέτηση ενός αρχείου κάτω από το http://<naam>/.well-known/acme-challenge/80όχι
DNS-01δημιουργία ενός TXT record _acme-challenge.<naam>καμίαναι
TLS-ALPN-01παρουσίαση ενός ειδικού πιστοποιητικού κατά το TLS handshake443όχι

Για ένα συνηθισμένο VPS με έναν ιστότοπο, το HTTP-01 είναι το πιο απλό. Για αυτό πρέπει:

  • το όνομα να δείχνει με A (και AAAA) στον server σας (μάθημα 7.1)·
  • η θύρα 80 να είναι ανοιχτή για όλο τον κόσμο, ακόμη κι αν ο ιστότοπός σας κατά τα άλλα χρησιμοποιεί μόνο https. Η Let's Encrypt επικυρώνει μόνο μέσω της θύρας 80 και από πολλά σημεία στο internet· δεν μπορείτε να βάλετε αυτές τις διευθύνσεις στο firewall σας·
  • ο server σας να απαντά το ίδιο μέσω IPv4 και IPv6. Αν το όνομα έχει AAAA record, η Let's Encrypt δοκιμάζει πρώτα IPv6. Μόνο αν το IPv6 δεν δίνει καθόλου σύνδεση, επιστρέφει στο IPv4.

Το DNS-01 το χρειάζεστε για ένα πιστοποιητικό wildcard ή όταν ο server δεν είναι προσβάσιμος από έξω. Τότε ο ACME client πρέπει να μπορεί να τροποποιεί το DNS σας, συνήθως μέσω ενός κλειδιού API του παρόχου DNS σας. Αυτό το κλειδί μπορεί να αλλάξει ολόκληρο το DNS σας: φυλάξτε το εξίσου προσεκτικά με έναν κωδικό πρόσβασης.

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

Οι δημιουργοί του certbot συνιστούν το snap, επειδή έχει πάντα την πιο πρόσφατη έκδοση. Σε Debian και Ubuntu μπορείτε επίσης να το εγκαταστήσετε απλά από το αποθετήριο πακέτων:

anna@web1:~$ sudo apt install certbot python3-certbot-nginx

Η έκδοση της διανομής είναι παλαιότερη, αλλά λαμβάνει ενημερώσεις ασφαλείας μέσω apt (μαθήματα 4.1 και 4.2), και αυτό ταιριάζει με την υπόλοιπη σειρά μαθημάτων. Επιλέξτε έναν από τους δύο τρόπους, όχι και τους δύο: δύο εγκαταστάσεις εμποδίζουν η μία την άλλη κατά την ανανέωση.

Αίτηση πιστοποιητικού

Με τον ιστότοπο από το μάθημα 7.2 να λειτουργεί ήδη στη θύρα 80:

anna@web1:~$ sudo certbot --nginx -d example.com -d www.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address or hit Enter to skip.
 (Enter 'c' to cancel):
...
Requesting a certificate for example.com and www.example.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2027-02-07.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/sites-enabled/example.com
Successfully deployed certificate for www.example.com to /etc/nginx/sites-enabled/example.com
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com

(Η ημερομηνία και οι λεπτομέρειες είναι ενδεικτικές.) Το plug-in --nginx κάνει τρία πράγματα: προετοιμάζει προσωρινά το challenge, λαμβάνει το πιστοποιητικό και προσαρμόζει το server block σας με ένα μπλοκ listen 443 ssl και μια ανακατεύθυνση από http σε https. Αν προτιμάτε να το κάνετε μόνοι σας, χρησιμοποιήστε το certbot certonly --nginx και προσθέστε τις γραμμές μόνοι σας στη διαμόρφωσή σας.

Μερικά σημεία προσοχής:

  • Ζητήστε όλα τα ονόματα μαζί που ανήκουν στον ιστότοπο (-d για κάθε όνομα). Κάθε όνομα πρέπει να δείχνει στον server, αλλιώς αποτυγχάνει ολόκληρη η αίτηση.
  • Το ιδιωτικό κλειδί (privkey.pem) βρίσκεται στο /etc/letsencrypt/live/ και είναι αναγνώσιμο μόνο από τον root. Μην το αντιγράφετε σε άλλα σημεία και μην το βάζετε ποτέ σε αντίγραφο ασφαλείας που μπορούν να διαβάσουν άλλοι.
  • Η διεύθυνση email είναι προαιρετική. Από τον Ιούνιο του 2025 η Let's Encrypt δεν στέλνει πλέον email όταν ένα πιστοποιητικό πλησιάζει στη λήξη του. Πρέπει λοιπόν να παρακολουθείτε μόνοι σας ότι η ανανέωση πετυχαίνει (μάθημα 8.3).

Ανακατεύθυνση από http σε https

Μετά το certbot η διαμόρφωσή σας μοιάζει περίπου έτσι (καθαρισμένη· το certbot προσθέτει μόνο του σχόλια # managed by Certbot και μερικές φορές γραμμές if):

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    root /var/www/example.com;
    ...
}

Το πρώτο μπλοκ ανακατευθύνει όλη την κίνηση http στο ίδιο όνομα και την ίδια διαδρομή μέσω https, με μόνιμη ανακατεύθυνση (301). Το αρχείο challenge για την ανανέωση εξακολουθεί να λειτουργεί: η Let's Encrypt ακολουθεί αυτή την ανακατεύθυνση. Το δεύτερο μπλοκ είναι ο πραγματικός ιστότοπος. Αν θέλετε επιπλέον να στέλνετε το www στο σκέτο όνομα (ή το αντίστροφο), κάντε το σε ξεχωριστό μπλοκ, ώστε οι επισκέπτες να βλέπουν ένα σταθερό όνομα.

Ανανέωση: αυτόματα, και με έλεγχο

Ένα πιστοποιητικό της Let's Encrypt ισχύει σήμερα 90 ημέρες. Αυτό θα μειωθεί: η Let's Encrypt έχει ανακοινώσει ότι το προεπιλεγμένο προφίλ θα εκδίδει από τις 10 Φεβρουαρίου 2027 πιστοποιητικά 64 ημερών και από τις 16 Φεβρουαρίου 2028 πιστοποιητικά 45 ημερών. Η χειροκίνητη ανανέωση δεν αποτελεί λοιπόν επιλογή· πρέπει να γίνεται αυτόματα.

Κατά την εγκατάσταση, το certbot δημιουργεί ένα systemd timer (ή μια γραμμή cron) που ελέγχει δύο φορές την ημέρα αν κάποιο πιστοποιητικό πρέπει να ανανεωθεί. Ελέγξτε ότι υπάρχει και δοκιμάστε την ανανέωση με μια δοκιμαστική αίτηση:

anna@web1:~$ systemctl list-timers 'certbot*'
NEXT                        LEFT    LAST PASSED UNIT          ACTIVATES
Mon 2026-11-09 22:41:00 CET 9h left -    -      certbot.timer certbot.service
anna@web1:~$ sudo certbot renew --dry-run
...
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)

Μετά την ανανέωση, το nginx πρέπει επίσης να φορτώσει το νέο πιστοποιητικό. Με το plug-in του nginx το certbot το φροντίζει μόνο του· αν χρησιμοποιείτε το certonly, δημιουργήστε ένα deploy hook που επαναφορτώνει το nginx, για παράδειγμα ένα εκτελέσιμο script στο /etc/letsencrypt/renewal-hooks/deploy/ με systemctl reload nginx.

Οι καλοί ACME clients χρησιμοποιούν το ARI (ACME Renewal Information): η Let's Encrypt υποδεικνύει τότε η ίδια πότε πρέπει να ανανεωθεί ένα πιστοποιητικό, για παράδειγμα νωρίτερα αν υπάρχει πρόβλημα με μια σειρά πιστοποιητικών. Γι' αυτό διατηρείτε τον client σας ενημερωμένο.

Όταν μια αίτηση αποτυγχάνει

Μήνυμα (συντομευμένο)ΑιτίαΛύση
Timeout during connect (likely firewall problem)η θύρα 80 είναι κλειστή ή το όνομα δείχνει σε άλλη διεύθυνσηfirewall (μάθημα 5.2), A/AAAA (μάθημα 7.1)
Invalid response from http://.../.well-known/acme-challenge/...: 404απαντά άλλος server ή άλλο server block, συχνά μέσω IPv6listen [::]:80, έλεγχος του AAAA record
CAA record for example.com prevents issuanceένα CAA record επιτρέπει μόνο άλλη αρχή έκδοσηςπροσαρμογή του CAA (μάθημα 7.1)
too many certificates already issuedένα rate limitαναμονή· δοκιμές με staging

Η Let's Encrypt έχει rate limits για την αποτροπή κατάχρησης. Τα σημαντικότερα: έως 50 νέα πιστοποιητικά ανά καταχωρισμένο domain ανά 7 ημέρες, έως 5 πιστοποιητικά για ακριβώς το ίδιο σύνολο ονομάτων ανά 7 ημέρες και έως 5 αποτυχημένες επικυρώσεις ανά όνομα ανά ώρα. Όποιος πειραματίζεται και κάνει συνεχώς νέα αίτηση, τα συναντά γρήγορα. Γι' αυτό κάντε δοκιμές με το περιβάλλον staging, που έχει πολύ ευρύτερα όρια αλλά εκδίδει πιστοποιητικά που οι browsers δεν εμπιστεύονται:

anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.com

Όταν λειτουργεί εκεί, ζητήστε το πραγματικό πιστοποιητικό.

Σε AlmaLinux και Rocky Linux

Εκεί το certbot προέρχεται από το EPEL (dnf install certbot python3-certbot-nginx) ή ως snap. Το plug-in και οι εντολές είναι ίδια. Μην ξεχνάτε το firewalld (--add-service=http --add-service=https) και το SELinux, αν τα πιστοποιητικά βρίσκονται σε ασυνήθιστη θέση.

Στην πράξη

Σε ένα πακέτο hosting το πάνελ φροντίζει για εσάς το πιστοποιητικό (στη WebOké και σε άλλες εταιρείες hosting με DirectAdmin, cPanel ή Plesk). Σε ένα VPS το κάνετε μόνοι σας, με certbot, Caddy ή τον ACME client που συνοδεύει το λογισμικό σας. Αυτό ισχύει σε κάθε πάροχο.

Σύνοψη

  • Ένα πιστοποιητικό της Let's Encrypt αποδεικνύει ότι διαχειρίζεστε το όνομα· το certbot το ζητά, το εγκαθιστά και το ανανεώνει μέσω ACME.
  • Το HTTP-01 χρειάζεται τη θύρα 80 ανοιχτή για όλους και την ίδια απάντηση μέσω IPv4 και IPv6· το DNS-01 είναι για wildcards.
  • Το certbot --nginx -d ... -d ... φροντίζει για το πιστοποιητικό και την ανακατεύθυνση σε https· ζητήστε όλα τα ονόματα ενός ιστότοπου μαζί.
  • Τα πιστοποιητικά ισχύουν σήμερα 90 ημέρες και η διάρκεια θα μειωθεί· ελέγξτε το timer και το certbot renew --dry-run, και παρακολουθείτε μόνοι σας την ημερομηνία λήξης.
  • Κάντε δοκιμές με --staging για να αποφύγετε τα rate limits· προσέξτε το CAA.

Κουίζ

1. Ο ιστότοπός σας πρέπει να είναι προσβάσιμος μόνο μέσω https. Μπορείτε τότε να κλείσετε τη θύρα 80 στο firewall, αν χρησιμοποιείτε HTTP-01;



2. Θέλετε ένα πιστοποιητικό για το *.example.com. Ποια δοκιμασία χρειάζεστε;



3. Η αίτηση αποτυγχάνει με 404 στο αρχείο challenge, ενώ το curl http://example.com/ μέσω IPv4 εμφανίζει τον ιστότοπό σας. Ποια είναι η πιο πιθανή αιτία;



4. Γιατί η αυτόματη ανανέωση είναι πιο σημαντική από ποτέ;



5. Πειραματίζεστε και έχετε ήδη ζητήσει σήμερα τέσσερις φορές το ίδιο πιστοποιητικό. Τι κάνετε για την επόμενη δοκιμή;



Άσκηση

Άσκηση Z7.3: https με έγκυρο πιστοποιητικό. Ζητήστε ένα πιστοποιητικό για τον ιστότοπό σας (με certbot ή Caddy), ανακατευθύνετε το http σε https και δοκιμάστε την ανανέωση με certbot renew --dry-run (στο Caddy: ελέγξτε στα αρχεία καταγραφής ότι το πιστοποιητικό λήφθηκε). Συμπληρώστε το όνομα του ιστότοπού σας. Το πρόγραμμα δημιουργεί μια σύνδεση TLS στη θύρα 443 και ελέγχει αν το πιστοποιητικό είναι έγκυρο, αν είναι υπογεγραμμένο από αξιόπιστη αρχή έκδοσης και αν καλύπτει το όνομά σας, και στη συνέχεια ζητά το http://<naam>/ για να δει αν ανακατευθύνετε σε https. Επιπλέον συμπληρώνετε πότε λήγει το πιστοποιητικό σας και πώς έχετε ρυθμίσει την ανανέωση.

Άσκηση Z7.3: https με έγκυρο πιστοποιητικό

Μόνο για εγγεγραμμένους εκπαιδευόμενους. Ανοίγουμε τα https://<naam>/ και http://<naam>/ όπως ένας browser, από τον web server μας.




Ό,τι συμπληρώνετε και ό,τι βρίσκουμε δεν το αποθηκεύουμε. Το πρόγραμμα περιήγησής σας θυμάται τις απαντήσεις σας και αν περάσατε την άσκηση. Αν έχετε εγγραφεί, αποθηκεύουμε μόνο ότι η άσκηση ήταν (σχεδόν) σωστή στο Τα μαθήματά μου· εκεί μπορείτε και να το διαγράψετε.

Για περαιτέρω μελέτη

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…