Πώς να κάνετε το HTTPS να λειτουργεί στο περιβάλλον τοπικής ανάπτυξης σε 5 λεπτά

Σχεδόν οποιοσδήποτε ιστότοπος επισκέπτεστε σήμερα προστατεύεται από το HTTPS. Εάν η δική σας δεν είναι ακόμα, πρέπει να είναι. Η ασφάλεια του διακομιστή σας με HTTPS σημαίνει επίσης ότι δεν μπορείτε να στείλετε αιτήματα σε αυτόν τον διακομιστή από έναν που δεν προστατεύεται από το HTTPS. Αυτό δημιουργεί πρόβλημα για προγραμματιστές που χρησιμοποιούν ένα περιβάλλον τοπικής ανάπτυξης, επειδή όλοι τους λειτουργούν //localhostεκτός συσκευασίας.

Κατά την εκκίνηση είμαι μέρος, αποφασίσαμε να διασφαλίσουμε τα τελικά σημεία AWS Elastic Load Balancer με HTTPS ως μέρος μιας κίνησης για ενίσχυση της ασφάλειας. Συνάντησα μια κατάσταση όπου τα αιτήματα του τοπικού αναπτυξιακού περιβάλλοντος στον διακομιστή άρχισαν να απορρίπτονται.

Μια γρήγορη αναζήτηση Google αργότερα, βρήκα αρκετά άρθρα όπως αυτό, αυτό ή αυτό με λεπτομερείς οδηγίες σχετικά με τον τρόπο εφαρμογής του HTTPS localhost. Καμία από αυτές τις οδηγίες δεν φάνηκε να λειτουργεί ακόμη και αφού τις παρακολούθησα θρησκευτικά. Το Chrome πάντα μου έκανε NET::ERR_CERT_COMMON_NAME_INVALIDλάθος.

Το πρόβλημα

Όλες οι λεπτομερείς οδηγίες που βρήκα ήταν σωστές για τη στιγμή που γράφτηκαν. Οχι πια.

Μετά από έναν τόνο Googling, ανακάλυψα ότι ο λόγος για τον οποίο απορρίφθηκε το τοπικό μου πιστοποιητικό ήταν ότι το Chrome είχε καταργήσει την υποστήριξη για κοινή αντιστοίχιση ονόματος στα πιστοποιητικά, στην πραγματικότητα, που απαιτούσε θέμαAltName από τον Ιανουάριο του 2017.

Η λύση

Θα χρησιμοποιήσουμε το OpenSSL για να δημιουργήσουμε όλα τα πιστοποιητικά μας.

Βήμα 1: Root SSL πιστοποιητικό

Το πρώτο βήμα είναι να δημιουργήσετε ένα πιστοποιητικό Root Secure Sockets Layer (SSL). Αυτό το πιστοποιητικό ρίζας μπορεί στη συνέχεια να χρησιμοποιηθεί για την υπογραφή οποιουδήποτε αριθμού πιστοποιητικών που μπορείτε να δημιουργήσετε για μεμονωμένους τομείς. Εάν δεν είστε εξοικειωμένοι με το οικοσύστημα SSL, αυτό το άρθρο από το DNSimple κάνει καλή δουλειά στην εισαγωγή πιστοποιητικών Root SSL.

Δημιουργήστε ένα κλειδί RSA-2048 και αποθηκεύστε το σε ένα αρχείο rootCA.key. Αυτό το αρχείο θα χρησιμοποιηθεί ως κλειδί για τη δημιουργία του πιστοποιητικού Root SSL. Θα σας ζητηθεί μια φράση πρόσβασης που θα πρέπει να εισαγάγετε κάθε φορά που χρησιμοποιείτε αυτό το συγκεκριμένο κλειδί για να δημιουργήσετε ένα πιστοποιητικό.

openssl genrsa -des3 -out rootCA.key 2048

Μπορείτε να χρησιμοποιήσετε το κλειδί που δημιουργήσατε για να δημιουργήσετε ένα νέο πιστοποιητικό Root SSL. Αποθηκεύστε το σε ένα αρχείο με το όνομα rootCA.pem. Αυτό το πιστοποιητικό θα έχει διάρκεια ισχύος 1.024 ημέρες. Μη διστάσετε να το αλλάξετε σε όσες ημέρες θέλετε. Θα σας ζητηθεί και άλλες προαιρετικές πληροφορίες.

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

Βήμα 2: Εμπιστευτείτε το πιστοποιητικό SSL ρίζας

Προτού μπορέσετε να χρησιμοποιήσετε το πρόσφατα δημιουργημένο πιστοποιητικό Root SSL για να ξεκινήσετε την έκδοση πιστοποιητικών τομέα, υπάρχει ένα ακόμη βήμα. Πρέπει να πείτε στο Mac σας να εμπιστεύεται το πιστοποιητικό ρίζας σας, ώστε όλα τα μεμονωμένα πιστοποιητικά που εκδίδονται από αυτό να είναι αξιόπιστα.

Ανοίξτε το Keychain Access στο Mac σας και μεταβείτε στην κατηγορία Πιστοποιητικά στο Keychain του συστήματος σας. Μόλις φτάσετε εκεί, εισαγάγετε το rootCA.pemαρχείο χρησιμοποιώντας> Εισαγωγή στοιχείων. Κάντε διπλό κλικ στο εισαγόμενο πιστοποιητικό και αλλάξτε το αναπτυσσόμενο μενού "Όταν χρησιμοποιείτε αυτό το πιστοποιητικό:" σε Πάντα Trtt στην ενότητα Trust.

Το πιστοποιητικό σας θα πρέπει να μοιάζει με αυτό στην Keychain Access εάν έχετε ακολουθήσει σωστά τις οδηγίες μέχρι τώρα.

Βήμα 2: Πιστοποιητικό SSL τομέα

Το root πιστοποιητικό SSL μπορεί τώρα να χρησιμοποιηθεί για την έκδοση πιστοποιητικού ειδικά για το περιβάλλον τοπικής ανάπτυξης που βρίσκεται στη διεύθυνση localhost.

Δημιουργήστε ένα νέο αρχείο διαμόρφωσης OpenSSL, server.csr.cnfώστε να μπορείτε να εισαγάγετε αυτές τις ρυθμίσεις κατά τη δημιουργία ενός πιστοποιητικού αντί να τις εισαγάγετε στη γραμμή εντολών.

[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=US ST=RandomState L=RandomCity O=RandomOrganization OU=RandomOrganizationUnit [email protected] CN = localhost

Δημιουργήστε ένα v3.extαρχείο για να δημιουργήσετε ένα πιστοποιητικό X509 v3. Παρατηρήστε πώς καθορίζουμε subjectAltNameεδώ.

authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = localhost

Δημιουργήστε ένα κλειδί πιστοποιητικού για τη localhostχρήση των ρυθμίσεων διαμόρφωσης που είναι αποθηκευμένες στο server.csr.cnf. Αυτό το κλειδί αποθηκεύεται στο server.key.

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

Ένα αίτημα υπογραφής πιστοποιητικού εκδίδεται μέσω του πιστοποιητικού root SSL που δημιουργήσαμε νωρίτερα για τη δημιουργία ενός πιστοποιητικού τομέα για localhost. Η έξοδος είναι ένα αρχείο πιστοποιητικού που ονομάζεται server.crt.

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

Χρησιμοποιήστε το νέο σας πιστοποιητικό SSL

Είστε πλέον έτοιμοι να ασφαλίσετε τη συσκευή σας localhostμε HTTPS. Μετακινήστε τα αρχεία server.keyκαι τα server.crtαρχεία σε μια προσβάσιμη τοποθεσία στον διακομιστή σας και συμπεριλάβετε τα κατά την εκκίνηση του διακομιστή σας.

Σε μια εφαρμογή Express γραμμένη στο Node.js, δείτε πώς θα το κάνατε. Βεβαιωθείτε ότι το κάνετε μόνο για το τοπικό σας περιβάλλον. Μην το χρησιμοποιείτε στην παραγωγή .

Ελπίζω να βρείτε αυτό το σεμινάριο χρήσιμο Εάν δεν αισθάνεστε άνετα με την εκτέλεση των εντολών που δίνετε εδώ από εσάς, έχω δημιουργήσει ένα σύνολο πρακτικών σεναρίων που μπορείτε να εκτελέσετε γρήγορα για να δημιουργήσω τα πιστοποιητικά για εσάς. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο repo GitHub.

Μου αρέσει να βοηθάω άλλους προγραμματιστές ιστού. Ακολουθήστε με στο Twitter και ενημερώστε με αν έχετε οποιεσδήποτε προτάσεις ή σχόλια. Εάν θέλετε να δείξετε την εκτίμησή σας για οποιαδήποτε δουλειά που έχω κάνει, είτε πρόκειται για μια ανάρτηση ιστολογίου, ένα έργο ανοιχτού κώδικα ή απλά ένα αστείο tweet, μπορείτε να μου αγοράσετε ένα φλιτζάνι καφέ.