«Η σύνδεσή σας δεν είναι ιδιωτική»: η προειδοποίηση για το πιστοποιητικό SSL
· 2 λεπτά ανάγνωσης
Τι σημαίνει το σφάλμα
Ο browser συνδέθηκε στον server, ο server παρουσίασε το πιστοποιητικό του και ο browser αρνήθηκε να το εμπιστευτεί. Το Chrome δείχνει «Η σύνδεσή σας δεν είναι ιδιωτική» με έναν κωδικό σφάλματος από κάτω· το Firefox «Προειδοποίηση: Πιθανός κίνδυνος ασφαλείας»· το Safari «Η σύνδεση δεν είναι ιδιωτική». Η ιστοσελίδα δεν έχει χακαριστεί και ο υπολογιστής σου δεν έχει μολυνθεί· το πιστοποιητικό που έστειλε ο server δεν περνά τους ελέγχους που κάνει ένας browser.
Ο κωδικός σφάλματος σου λέει ποιος έλεγχος απέτυχε:
NET::ERR_CERT_DATE_INVALID: το πιστοποιητικό έχει λήξει ή η ημερομηνία έναρξής του βρίσκεται στο μέλλον (ή το ρολόι του επισκέπτη είναι λάθος).NET::ERR_CERT_COMMON_NAME_INVALID: το πιστοποιητικό είναι για άλλο όνομα, για παράδειγμα για τοwww.example.comαλλά όχι για τοexample.com.NET::ERR_CERT_AUTHORITY_INVALID: ο browser δεν μπορεί να ανιχνεύσει το πιστοποιητικό σε μια αξιόπιστη αρχή: αυτοϋπογεγραμμένο, άγνωστος εκδότης ή ενδιάμεσο πιστοποιητικό που λείπει.NET::ERR_CERT_REVOKED: το πιστοποιητικό ανακλήθηκε από τον εκδότη του.SSL_ERROR_BAD_CERT_DOMAINκαιSEC_ERROR_EXPIRED_CERTIFICATEείναι οι εκδόσεις του Firefox για τα σφάλματα ονόματος και ημερομηνίας.
Συνηθισμένες αιτίες
- Το πιστοποιητικό έληξε. Τα πιστοποιητικά του Let's Encrypt ισχύουν 90 ημέρες· η αυτόματη ανανέωση απέτυχε για εβδομάδες και κανείς δεν το πρόσεξε μέχρι την ημέρα που τελείωσε. Τα πιστοποιητικά επί πληρωμή λήγουν μετά από ένα έτος και το email ανανέωσης πήγε σε παλιά διεύθυνση.
- Ανανεώθηκε, αλλά δεν έγινε reload. Το certbot έγραψε το νέο πιστοποιητικό στον δίσκο, αλλά ο web server εξακολουθεί να σερβίρει το παλιό από τη μνήμη, επειδή λείπει το hook για το reload.
- Λάθος όνομα. Το πιστοποιητικό καλύπτει το
example.comαλλά οι επισκέπτες φτάνουν στοwww.example.com, ή προστέθηκε ένα νέο subdomain χωρίς πιστοποιητικό. - Λείπει το ενδιάμεσο πιστοποιητικό. Ο server στέλνει μόνο το δικό του πιστοποιητικό, όχι την αλυσίδα. Οι browsers επιτραπέζιων υπολογιστών συχνά καλύπτουν το κενό από την cache· τα κινητά και οι εφαρμογές αποτυγχάνουν.
- Πρόβλημα ρολογιού. Στον υπολογιστή του επισκέπτη, μια λάθος ημερομηνία κάνει κάθε πιστοποιητικό να φαίνεται ληγμένο ή μη έγκυρο ακόμη. Στον server, ένα λάθος ρολόι χαλάει την ανανέωση.
- Ένα CDN ή proxy μπροστά με δικό του πιστοποιητικό που έληξε ή δεν καλύπτει το όνομα, ενώ ο origin είναι εντάξει.
Αν είσαι επισκέπτης
Έλεγξε πρώτα την ημερομηνία και την ώρα του υπολογιστή σου· μια νεκρή μπαταρία CMOS ή ένας απενεργοποιημένος συγχρονισμός ώρας κάνει κάθε ιστοσελίδα να αποτυγχάνει. Μετά δοκίμασε άλλο δίκτυο. Αν η προειδοποίηση εμφανίζεται μόνο για μία ιστοσελίδα και σε κάθε συσκευή, φταίει το πιστοποιητικό της ιστοσελίδας και πρέπει να το διορθώσει ο ιδιοκτήτης. Το να πατήσεις «Συνέχεια στην ιστοσελίδα (μη ασφαλές)» είναι εντάξει για μια ιστοσελίδα που γνωρίζεις, όχι για οτιδήποτε έχει σύνδεση ή πληρωμή.
Αν είναι η δική σου ιστοσελίδα: έλεγξε πρώτα
Τρέξε τον έλεγχο SSL. Δείχνει την ημερομηνία λήξης, τα ονόματα για τα οποία ισχύει το πιστοποιητικό και αν η αλυσίδα είναι πλήρης, απέξω, χωρίς καμία cache browser. Μετά, στον δικό σου server:
# τι στέλνει πραγματικά ο server;
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject -ext subjectAltName
# τι υπάρχει στον δίσκο;
sudo certbot certificates
# είναι σωστό το ρολόι του server;
timedatectl
Αν οι ημερομηνίες στον δίσκο είναι νεότερες από τις ημερομηνίες που στέλνει ο server, έχεις την περίπτωση 2: ανανεώθηκε αλλά δεν έγινε reload.
Διορθώσεις στον δικό σου server
1. Ανανέωσε με certbot
sudo certbot renew
# ή, αν το renew λέει «not yet due» αλλά το πιστοποιητικό που σερβίρεται είναι παλιό:
sudo certbot renew --force-renewal
sudo systemctl reload nginx # ή apache2
Αν η ανανέωση αποτύχει, η έξοδος λέει γιατί. Οι συνήθεις λόγοι: η θύρα 80 είναι μπλοκαρισμένη ή ανακατευθύνεται κάπου που το certbot δεν περιμένει (η πρόκληση HTTP-01 χρειάζεται το /.well-known/acme-challenge/ να είναι προσβάσιμο μέσω απλού HTTP), η εγγραφή DNS δείχνει σε άλλον server, ή φτάστηκε ένα rate limit μετά από πολλές αποτυχημένες προσπάθειες. Διόρθωσε την αιτία και τρέχε sudo certbot renew --dry-run μέχρι να περάσει.
2. Κάνε το reload αυτόματο
# Debian/Ubuntu: το certbot εγκαθιστά ένα timer· έλεγξέ το
systemctl list-timers | grep certbot
# πρόσθεσε ένα deploy hook ώστε ο web server να πάρει το νέο πιστοποιητικό
printf '#!/bin/sh\nsystemctl reload nginx\n' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-web.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-web.sh
3. Πρόσθεσε το όνομα που λείπει
sudo certbot --nginx -d example.com -d www.example.com -d shop.example.com --expand
Η σημαία --expand αντικαθιστά το υπάρχον πιστοποιητικό με ένα που καλύπτει όλα τα ονόματα της λίστας.
4. Διόρθωσε την αλυσίδα
Με το certbot, στρέψε τον web server στο fullchain.pem, ποτέ στο cert.pem:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Apache: SSLCertificateFile με το fullchain.pem. Με ένα πιστοποιητικό που αγόρασες, κατέβασε το ενδιάμεσο («CA bundle») από τον εκδότη και πρόσθεσέ το στο αρχείο του πιστοποιητικού. Δοκίμασε με sudo nginx -t (Apache: sudo apachectl configtest), κάνε reload και μετά έλεγξε την αλυσίδα με τον έλεγχο SSL.
5. Διόρθωσε το ρολόι
sudo timedatectl set-ntp true
timedatectl
Ένας server με ρολόι που διαφέρει περισσότερο από λίγα λεπτά αποτυγχάνει στην επικύρωση πιστοποιητικών και προς τις δύο κατευθύνσεις.
6. Shared hosting ή εργαλείο δημιουργίας ιστοσελίδων
Οι περισσότεροι πάροχοι εκδίδουν και ανανεώνουν πιστοποιητικά Let's Encrypt από τον πίνακα ελέγχου («SSL/TLS», «Ασφάλεια», «Let's Encrypt»). Άνοιξέ τον, έλεγξε ότι το πιστοποιητικό καλύπτει και το example.com και το www.example.com και πάτα ανανέωση ή επανέκδοση. Αν ο πίνακας λέει ότι το πιστοποιητικό είναι έγκυρο αλλά οι browsers διαφωνούν, ο πάροχος έχει πρόβλημα reload ή αλυσίδας από τη δική του πλευρά.
Όταν φταίει ο πάροχός σου
Γεια σας, από περίπου τις 06:00 UTC οι browsers δείχνουν «Η σύνδεσή σας δεν είναι ιδιωτική» (NET::ERR_CERT_DATE_INVALID) για την ιστοσελίδα μου example.com. Ο πίνακας ελέγχου δείχνει έγκυρο πιστοποιητικό, οπότε ο web server φαίνεται να σερβίρει παλιό. Μπορείτε να κάνετε reload το πιστοποιητικό στον server και να ελέγξετε την αυτόματη ανανέωση για το domain μου;
Πώς να αποτρέψεις το επόμενο
Ένα πιστοποιητικό που έληξε είναι η μοναδική διακοπή με γνωστή ημερομηνία. Η παρακολούθηση πιστοποιητικών SSL σε προειδοποιεί πριν από τη λήξη, και ξανά αν η αλυσίδα ή το όνομα είναι λάθος· 5 έλεγχοι είναι δωρεάν. Στον δικό σου server, ένα Quick Fix ανανεώνει το πιστοποιητικό εκεί όπου έχει ρυθμιστεί το certbot και κάνει reload τον web server, σε σταθερή τιμή· ένα Deep Fix ρυθμίζει την ανανέωση όπου δεν υπάρχει ακόμη.
Τι κάνεις τώρα
Έλεγξε το πιστοποιητικό
Ημερομηνία λήξης, αλυσίδα και όνομα hostname οποιουδήποτε πιστοποιητικού σε δευτερόλεπτα. Δωρεάν, χωρίς εγγραφή.
Έλεγχος SSLΈπεσε; Αναλαμβάνουμε.
Στον δικό σου server ή σε webspace με πρόσβαση SSH: ένα Quick Fix σε σταθερή τιμή για τις συνηθισμένες αιτίες, ένα Deep Fix με χρέωση σε τμήματα των 15 λεπτών για τις υπόλοιπες, όλο το εικοσιτετράωρο. Τιμή πριν παραγγείλεις.
Ζήτησε επισκευήΠερισσότεροι οδηγοί
- Η ιστοσελίδα σου έχει πέσει. Τι να κάνεις στα πρώτα 15 λεπτά.
- Έπεσε ο server: τι να ελέγξεις πρώτα και με ποια σειρά
- 502 Bad Gateway: αιτίες και πώς να το διορθώσεις
- 503 Service Unavailable: υπερφόρτωση ή συντήρηση;
- 504 Gateway Timeout: τι σημαίνει και πώς να το διορθώσεις
- DNS_PROBE_FINISHED_NXDOMAIN: αιτίες και λύσεις
- ERR_CONNECTION_REFUSED: αιτίες και πώς να το διορθώσεις