Επιστροφή στο Webship blog

Webship μηχανική

Πιστοποιητικά TLS στο Webship: Η Ενσωματωμένη ACME CA

Δείτε πώς το Webship 1.4.0 εκδίδει και ανανεώνει ιδιωτικά πιστοποιητικά TLS ανά τοποθεσία με την ενσωματωμένη αρχή πιστοποίησης (CA), πώς λειτουργεί η εμπιστοσύνη του πελάτη, και πώς οι ενσωματωμένες ταυτότητες συνυπάρχουν με δημόσια πιστοποιητικά ACME και χειροκίνητα πιστοποιητικά.

# Πιστοποιητικά TLS στο Webship: Η Ενσωματωμένη ACME CA

Ένα πιστοποιητικό TLS εκτελεί δύο εργασίες: βοηθά στην κρυπτογράφηση μιας σύνδεσης και λέει στον πελάτη ποια ταυτότητα επικοινωνεί. Η κρυπτογράφηση μπορεί να είναι ισχυρή ενώ η απόφαση εμπιστοσύνης είναι λανθασμένη για το κοινό. Γι' αυτό η αυτοματοποίηση πιστοποιητικών πρέπει να ξεκινά με μία ερώτηση: ποιος πρέπει να εμπιστεύεται αυτόν τον ιστότοπο;

Το Webship 1.4.0 κάνει αυτήν την επιλογή ανεξάρτητα για κάθε ρυθμισμένο ιστότοπο. Ένας δημόσιος ιστότοπος μπορεί να χρησιμοποιεί ένα πιστοποιητικό ACME που εμπιστεύεται ο περιηγητής, μια εσωτερική υπηρεσία μπορεί να χρησιμοποιεί την ενσωματωμένη ιδιωτική αρχή πιστοποιητικών του Webship, και ένας ιστότοπος με υπάρχουσα PKI μπορεί να διατηρεί αρχεία πιστοποιητικών που διαχειρίζεται ο χειριστής. Όλοι μπορούν να μοιράζονται μία διαδικασία Webship χωρίς να μοιράζονται ένα ιδιωτικό κλειδί ή ένα όριο εμπιστοσύνης.

Τέσσερις αυτόματες λειτουργίες πιστοποιητικών, επιλεγόμενες ανά ιστότοπο

Το πεδίο certificate_mode ανήκει σε κάθε καταχώρηση [[sites]]. Δεν είναι ένας παγκόσμιος διακόπτης.

| Λειτουργία | Πηγή εμπιστοσύνης | Καλύτερη εφαρμογή | Διαδρομή επαλήθευσης | | --- | --- | --- | --- | | ανά_ιστοσελίδα | Δημόσιες αποθήκες εμπιστοσύνης προγραμμάτων περιήγησης και λειτουργικών συστημάτων | Μια δημόσια ιστοσελίδα με ένα ακριβές όνομα κεντρικού υπολογιστή | Δημόσιο ACME με TLS-ALPN-01 | | στόλος | Δημόσια καταστήματα εμπιστοσύνης προγραμμάτων περιήγησης και λειτουργικών συστημάτων | Μεγάλα σύνολα τρίτου και τετάρτου επιπέδου ονομάτων υπό ρητά καταχωρημένους τομείς | Δημόσιο ACME με DNS-01 και σταθερά κομμάτια πιστοποιητικών | | ενσωματωμένο | Μια ιδιωτική ρίζα Webship εγκατεστημένη από τον χειριστή | Εσωτερικές υπηρεσίες, διαχειριζόμενες συσκευές, ιδιωτικούς στόλους και περιβάλλοντα δοκιμών | Έκδοση εντός της διαδικασίας· χωρίς εξωτερική πρόκληση | | κοινόχρηστο | Δημόσια καταστήματα εμπιστοσύνης προγραμμάτων περιήγησης και λειτουργικών συστημάτων | Παλιές εγκαταστάσεις που χρησιμοποιούν σκόπιμα μια δημόσια ομάδα πολλαπλών SAN | Δημόσιο ACME με TLS-ALPN-01 |

Η προεπιλογή είναι ανά_ιστοσελίδα. Παραγγέλνει ένα δημόσιο πιστοποιητικό για το ακριβές όνομα της ιστοσελίδας. Η λειτουργία στόλου είναι η επεκτάσιμη δημόσια επιλογή για πολλούς βαθιούς υποτομείς. Η ενσωματωμένη λειτουργία χρησιμοποιεί το ιδιωτικό ενσωματωμένο CA του Webship. Η κοινόχρηστη λειτουργία παραμένει διαθέσιμη για συμβατότητα, αλλά δεν είναι η προεπιλογή.

Ένα πλήρες πιστοποιητικό και κλειδί κάτω από το [sites.tls] έχει πάντα προτεραιότητα έναντι της αυτόματης έκδοσης για αυτόν τον ιστότοπο.

Τι σημαίνει «ενσωματωμένο ACME CA»

Η ενότητα ρύθμισης ονομάζεται [acme_ca], αλλά η ενσωματωμένη CA δεν είναι δημόσια ή προσβάσιμη μέσω δικτύου υπηρεσία ACME. Δεν εκθέτει κανένα σημείο καταλόγου, δεν δέχεται απομακρυσμένη εγγραφή, δεν καλεί κανένα API καταχωρητή και δεν εκτελεί καμία πρόκληση απόδειξης ελέγχου.

Αντίθετα, το Webship κρατά όλη τη διαδρομή ιδιωτικής έκδοσης σε μία διαδικασία:

  1. Ο ιστότοπος επιλέγει certificate_mode = "embedded".
  2. Το Webship φορτώνει ή δημιουργεί την ιδιωτική ταυτότητα root στον διαμορφωμένο κατάλογο κατάστασης.
  3. Το Webship δημιουργεί ένα νέο ιδιωτικό κλειδί για τον ιστότοπο.
  4. Η ενσωματωμένη ρίζα υπογράφει ένα πιστοποιητικό φύλλου για εκείνο ακριβώς το όνομα.
  5. Η Webship επικυρώνει την ολοκληρωμένη ταυτότητα πριν την εγκαταστήσει στον ζωντανό επιλύτη TLS.
  6. Το πιστοποιητικό είναι στη συνέχεια διαθέσιμο σε κάθε ενεργοποιημένο πρωτόκολλο για αυτόν τον ιστότοπο.

Μια πρόκληση δικτύου τύπου ACME θα απέδειχνε μόνο το Webship στον εαυτό του, οπότε η ενσωματωμένη διαδρομή σκόπιμα δεν έχει πρωτόκολλο δικτύου. Η ενότητα [acme_ca] είναι ιδιωτική κατάσταση PKI: καθορίζει πού βρίσκεται η ρίζα και για πόσο χρόνο παραμένουν έγκυρα τα εκδοθέντα πιστοποιητικά φυλλώματος.

Διαμορφώστε ένα ενσωματωμένο πιστοποιητικό για έναν ιστότοπο

Αυτή είναι η ελάχιστη μορφή για έναν ιδιωτικό ιστότοπο:

~~~τομλ listen = "0.0.0.0:443"

[tls] unknown_sni = "απόρριψη"

[αυτόματο_tls] ενεργοποιημένο = αληθές cache_dir = "/var/lib/webship/acme"

[acme_ca] state_dir = "/var/lib/webship/acme-ca" leaf_validity_days = 90

[[ιστοσελίδες]] domain = "service.internal.example" root = "/srv/service" certificate_mode = "ενσωματωμένο"

[ιστότοποι.πρωτόκολλα] h1 = αληθές h2 = αληθές h3 = αληθές ~~~

Η ριζική ταυτότητα δημιουργείται με καθυστέρηση όταν ένας ενσωματωμένος ιστότοπος τη χρειάζεται για πρώτη φορά. Το Webship διατηρεί το ριζικό κλειδί με περιορισμένα δικαιώματα στο state_dir. Το ριζικό πιστοποιητικό έχει διάρκεια ζωής δέκα ετών· η διάρκεια ζωής του φύλλου ελέγχεται από το leaf_validity_days.

Θεωρήστε και τις δύο τοποθεσίες αποθήκευσης ως κατάσταση παραγωγής:

  • Η προσωρινή μνήμη ACME κρατά αυτόματα διαχειριζόμενες ταυτότητες ιστότοπου.
  • Ο φάκελος κατάστασης του ενσωματωμένου CA περιέχει την ιδιωτική ταυτότητα ρίζας.
  • Ο λογαριασμός υπηρεσίας χρειάζεται πρόσβαση, αλλά οι χρήστες της εφαρμογής δεν χρειάζονται.
  • Τα αντίγραφα ασφαλείας πρέπει να διατηρούν την εμπιστευτικότητα και τα δικαιώματα αρχείων.
  • Η παραγωγή, η ανάπτυξη και οι δοκιμές θα πρέπει να χρησιμοποιούν ξεχωριστές ρίζες και ξεχωριστούς φακέλους.

Η διαγραφή του ριζικού καταλόγου δεν «επαναφέρει το TLS». Δημιουργεί μια νέα άγκυρα εμπιστοσύνης. Οι πελάτες που εμπιστεύονται την παλιά ρίζα θα απορρίψουν τα πιστοποιητικά που εκδίδονται από την αντικατάσταση μέχρι να ενημερωθούν οι αποθηκευτικοί χώροι εμπιστοσύνης τους.

Ο ιδιωτικός θεσμός εμπιστοσύνης είναι εκούσιος

Τα πιστοποιητικά από την ενσωματωμένη Αρχή Πιστοποίησης δεν εμπιστεύονται αυτόματα οι δημόσιοι περιηγητές ή τα λειτουργικά συστήματα. Γίνονται αξιόπιστα μόνο αφού ο χειριστής εγκαταστήσει το εξαγόμενο ριζικό πιστοποιητικό Webship στο κατάστημα εμπιστοσύνης του πελάτη.

Αυτό καθιστά τη λειτουργία ενσωμάτωσης κατάλληλη για:

  • φορητοί υπολογιστές και τηλέφωνα που διαχειρίζεται η εταιρεία και έχουν εγγραφεί μέσω διαχείρισης συσκευών;
  • εσωτερική κυκλοφορία υπηρεσίας προς υπηρεσία με ρητή δέσμη CA;
  • ιδιωτικές συσκευές και ελεγχόμενοι στόλοι περιθωρίου;
  • περιβάλλοντα ανάπτυξης και δοκιμών που πρέπει να ασκήσουν πραγματική συμπεριφορά TLS;
  • αποσυνδεδεμένα δίκτυα που δεν μπορούν να βασιστούν σε δημόσια CA.

Δεν είναι η σωστή λειτουργία για έναν κοινό δημόσιο ιστότοπο των οποίων οι επισκέπτες χρησιμοποιούν μη διαχειριζόμενους περιηγητές. Χρησιμοποιήστε δημόσια έκδοση ανά ιστότοπο για ένα ακριβές δημόσιο όνομα, έκδοση για στόλο για μεγάλα σύνολα δημόσιων υποτομέων, μόνο κοινόχρηστη για μια σκόπιμη παλαιού τύπου ανάπτυξη πολλαπλών SAN, ή χειροκίνητα αρχεία από μια ήδη αξιόπιστη PKI.

Διανείμετε μόνο το ριζικό πιστοποιητικό στους πελάτες. Ποτέ μην διανείμετε το ριζικό ιδιωτικό κλειδί. Η κατοχή αυτού του κλειδιού δίνει στον κάτοχό του την εξουσία να εκδίδει ταυτότητες που εμπιστεύεται κάθε εγγεγραμμένος πελάτης.

Τα δημόσια και τα ιδιωτικά πιστοποιητικά μπορούν να συνυπάρχουν

Το Webship 1.4.0 μπορεί να αναμειγνύει στρατηγικές πιστοποιητικών στον ίδιο ακροατή:

~~~τομλ listen = "0.0.0.0:443"

[tls] unknown_sni = "απόρριψη"

[αυτόματο_tls] ενεργοποιημένο = αληθές directory_url = "https://acme-v02.api.letsencrypt.org/directory" cache_dir = "/var/lib/webship/acme" contacts = ["mailto:ops@example.com"] αποδοχή_όρων_υπηρεσίας = αληθές

[acme_ca] state_dir = "/var/lib/webship/acme-ca" leaf_validity_days = 90

[[ιστοσελίδες]] domain = "www.example.com" root = "/srv/public" certificate_mode = "ανά_ιστοσελίδα"

[[ιστότοποι]] domain = "control.internal.example" root = "/srv/control" certificate_mode = "ενσωματωμένο"

[[ιστοσελίδες]] domain = "payments.example.com" root = "/srv/payments"

[ιστοσελίδες.tls] cert = "/etc/webship/payments-fullchain.pem" κλειδί = "/etc/webship/payments-private-key.pem" ~~~

Εδώ, το www.example.com λαμβάνει το δικό του δημόσιο πιστοποιητικό ACME. Το control.internal.example λαμβάνει ένα ιδιωτικό πιστοποιητικό από την ενσωματωμένη CA. Το payments.example.com παραμένει υπό την εξωτερική PKI του φορέα διότι τα ρητά αρχεία του υπερισχύουν.

Ο δημόσιος κατάλογος ACME αγνοείται από ενσωματωμένους ιστότοπους. Η ενσωματωμένη ρίζα δεν υπογράφει ποτέ τον δημόσιο ιστότοπο. Ο χειροκίνητος ιστότοπος δεν εγγράφεται ποτέ σιωπηλά σε καμία από τις αυτόματες ροές εργασίας.

Ένας επιλύτης πιστοποιητικών για H1, H2, H3 και WebTransport

Η επιλογή του πιστοποιητικού γίνεται κατά τη διάρκεια της διαδικασίας χειραψίας TLS, πριν υπάρξει αίτημα HTTP. Το Webship χρησιμοποιεί το όνομα διακομιστή ClientHello για να επιλέξει την ταυτότητα του ιστότοπου και στη συνέχεια διαπραγματεύεται το πρωτόκολλο εφαρμογής.

  • Το HTTP/1.1 και το HTTP/2 χρησιμοποιούν TLS πάνω από TCP.
  • Το HTTP/3 και το WebTransport χρησιμοποιούν TLS μέσα σε QUIC πάνω από UDP.
  • Μια έγκυρη ταυτότητα ιστότοπου μπορεί να εξυπηρετήσει κάθε ενεργό πρωτόκολλο.
  • Το HTTP/3 απαιτεί επίσης προσβασιμότητα UDP· τα H1 και H2 χρησιμοποιούν τη διαδρομή TCP.
  • Το Alt-Svc μπορεί να διαφημίζει το H3 ενώ διατηρεί ένα TCP fallback.

Το TCP, TLS και QUIC χρησιμοποιούν το ίδιο μοντέλο ταυτότητας προσανατολισμένο στον ιστότοπο. Τα ακριβή ονόματα έχουν προτεραιότητα, ο μεγαλύτερος έγκυρος χαρακτήρας μπαλαντέρ κερδίζει όπου έχουν ρυθμιστεί πιστοποιητικά με μπαλαντέρ, και τα άγνωστα ονόματα SNI μπορούν να απορριφθούν αντί να λαμβάνεται ένα μη σχετικό προεπιλεγμένο πιστοποιητικό.

Χρησιμοποιήστε unknown_sni = "reject" σε έναν multi-site listener όταν ένα μη αναγνωρισμένο όνομα κεντρικού υπολογιστή πρέπει να αποτύχει κλειστό. Δοκιμάστε τα αναγνωρισμένα ονόματα, τα μη αναγνωρισμένα ονόματα και την αναμενόμενη συμπεριφορά χωρίς SNI πριν από την κυκλοφορία στην παραγωγή.

Περιστρέψτε ενσωματωμένες ταυτότητες χωρίς κενό εξυπηρέτησης

Το Webship εκθέτει την κατάσταση του πιστοποιητικού και τους ελεγχόμενους μετασχηματισμούς μέσω του πιστοποιημένου, περιορισμένου στον βρόχο (loopback) MCP διακομιστή του:

  • Η webship.tls.get_status αναφέρει τον ενεργό επιλύτη πιστοποιητικού και την κατάσταση ανανέωσης.
  • Η webship.tls.reissue_certificate εκδίδει ξανά ένα αυτόματα διαχειριζόμενο ιστότοπο μόνο όταν αυτός ο ιστότοπος χρησιμοποιεί ενσωματωμένη λειτουργία.
  • webship.tls.reload επανφορτώνει την κατάσταση πιστοποιητικού μέσω της κανονικής προστατευόμενης διαδρομής TLS.
  • Η αναφορά webship.acme_ca.status δείχνει εάν η ιδιωτική CA έχει επιλεγεί, τον κατάλογο κατάστασής της, τη διάρκεια ζωής του φύλλου, τον αριθμό εκδόσεων, τον αριθμό ανακλήσεων και πρόσφατο δείγμα τομέα.
  • Το webship.sites.apply προσθέτει ή αφαιρεί ιστότοπους σε σχέση με μια καρφιτσωμένη έκδοση διαμόρφωσης.

Για μια ενσωματωμένη επανέκδοση, η Webship δημιουργεί και επικυρώνει την αντικατάσταση πριν την ανταλλαγή της στην υπηρεσία. Η τρέχουσα έγκυρη ταυτότητα συνεχίζει να εξυπηρετεί μέχρι να είναι έτοιμη η νέα ταυτότητα. Η αποσυρμένη ταυτότητα καταγράφεται μόνο μετά την εγκατάσταση της αντικατάστασης.

Η άμεση λειτουργία επανέκδοσης απορρίπτει σκόπιμα τα δημόσια πιστοποιητικά ανά τοποθεσία. Η δημόσια ανανέωση πρέπει να παραμένει μέσα στον δημόσιο κύκλο ζωής ACME αντί να συγχέεται με την ιδιωτική υπογραφή σε διαδικασία. Η συμμετοχή σε κοινή λειτουργία είναι επίσης παγωμένη κατά την επανεκκίνηση επειδή η αλλαγή μιας ομάδας πολλαπλών SAN ξαναχτίζει το όριο ταυτότητας.

Το MCP είναι μια προνομιούχα επιφάνεια ελέγχου. Κρατήστε το σε επανάληψη, απαιτήστε TLS και ένα ισχυρό διακριτικό πρόσβασης, χρησιμοποιήστε έναν ελεγμένο σήραγγα για απομακρυσμένη διαχείριση και ελέγξτε κάθε μεταβολή.

Όρια αποτυχίας που έχουν σημασία

Ένα σύστημα ασφαλών πιστοποιητικών πρέπει να αποτύχει προς τη σωστή κατεύθυνση.

  • Ένας νεοδιαμορφωμένος ενσωματωμένος ιστότοπος δεν λαμβάνει την ταυτότητα ενός άλλου ιστότοπου ενώ εκκρεμεί η έκδοση.
  • Μια άκυρη αντικατάσταση δεν εγκαθίσταται πάνω σε ένα λειτουργικό πιστοποιητικό.
  • Τα ρητά χειροκίνητα αρχεία αποτρέπουν την αυτόματη κατοχή αυτού του ιστότοπου.
  • Άγνωστο όνομα SNI μπορεί να απορριφθεί πριν από τον HTTP δρομολογητή.
  • Η ενσωματωμένη CA παραμένει ιδιωτική και δεν έχει απομακρυσμένο σημείο εγγραφής.
  • Οι δημόσιες και ενσωματωμένες ταυτότητες χρησιμοποιούν ξεχωριστές διαδρομές προσωρινής μνήμης μέσα στην κατάσταση αυτόματης-TLS.

Μια προειδοποίηση ότι η ενσωματωμένη CA δεν έχει αρχικοποιηθεί σημαίνει ότι το Webship δεν μπόρεσε να ετοιμάσει τον διαμορφωμένο κατάλογο κατάστασης. Διορθώστε την ιδιοκτησία, τα δικαιώματα, τη μόνιμη αποθήκευση ή τη διαθεσιμότητα της αποθήκευσης πριν στείλετε κίνηση στον επηρεασμένο ιστότοπο. Μην παρακάμπτετε το σφάλμα αντιγράφοντας το ριζικό κλειδί άλλου περιβάλλοντος.

Λίστα ελέγχου παραγωγής

Πριν ενεργοποιήσετε τη λειτουργία ενσωμάτωσης:

  1. Καθορίστε κάθε ομάδα πελατών που πρέπει να εμπιστεύεται τον ιστότοπο.
  2. Δημιουργήστε μια ελεγχόμενη διαδικασία για την εξαγωγή και την εγκατάσταση του ριζικού πιστοποιητικού.
  3. Χρησιμοποιήστε ξεχωριστή κύρια κατάσταση για παραγωγή, ανάπτυξη και δοκιμές.
  4. Επιμείνετε και προστατέψτε τον κατάλογο κατάστασης ενσωματωμένου CA και την αυτόματη κρυφή μνήμη TLS.
  5. Τρέξτε το Webship υπό έναν αποκλειστικό λογαριασμό υπηρεσίας με πρόσβαση μόνο στα απαιτούμενα υλικά κλειδιού.
  6. Επιλέξτε το certificate_mode σε κάθε τοποθεσία όπου το όριο εμπιστοσύνης πρέπει να είναι ρητό.
  7. Ορίστε και δοκιμάστε την πολιτική για άγνωστο SNI.
  8. Ενεργοποιήστε σκόπιμα τα H1, H2 και H3 και επαληθεύστε τόσο τις διαδρομές TCP όσο και UDP.
  9. Εξάσκηση επανέκδοσης, επανεκκίνησης, δημιουργίας αντιγράφων ασφαλείας, επαναφοράς και επικύρωσης εμπιστοσύνης πελάτη εκτός παραγωγής.
  10. Τρέξτε το webship --check-config πριν την ανάπτυξη, στη συνέχεια επαληθεύστε τον εκδότη, τα ονόματα, την ισχύ, την αλυσίδα και τα συμφωνημένα πρωτόκολλα από έναν πραγματικό πελάτη.

Επίλεξε πρώτα την εμπιστοσύνη, δεύτερο την αυτοματοποίηση

Η ενσωματωμένη CA καταργεί μια εξωτερική εξάρτηση από υπηρεσία πιστοποιητικού για ιδιωτική υποδομή. Δεν καθιστά μια ιδιωτική ρίζα παγκοσμίως αξιόπιστη και δεν καταργεί τις ευθύνες PKI του χειριστή.

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

Αυτός ο διαχωρισμός είναι το χαρακτηριστικό. Ένας αυτόνομος διακομιστής μπορεί να αυτοματοποιεί ιδιωτικό TLS χωρίς να προσποιείται ότι είναι δημόσια Αρχή Πιστοποίησης — και οι δημόσιοι ιστότοποι μπορούν ακόμη να χρησιμοποιούν έγκριση ανά ιστότοπο ή στόλο που εμπιστεύεται ο περιηγητής στην ίδια διαδικασία.

Διαβάστε την εκδοθείσα τεκμηρίωση Webship 1.4.0 πριν από την κυκλοφορία. Το RFC 5280 ορίζει προφίλ και επικύρωση πιστοποιητικών, το RFC 6066 ορίζει τη σηματοδότηση ονόματος διακομιστή TLS, το RFC 8446 ορίζει το TLS 1.3, το RFC 8555 ορίζει το δημόσιο ACME, και το RFC 9525 ορίζει την επαλήθευση ταυτότητας υπηρεσίας.