[MUSIC]
Nella lezione precedente abbiamo appreso informazioni su HTTPS e su come possono effettuare
comunicazioni sicure tra il client e il server.
Abbiamo anche imparato un po 'sulla crittografia,
abbastanza per capire come funziona HTTPS.
Per noi di configurare il nostro server HTTP,
abbiamo bisogno di ottenere una chiave pubblica e un certificato.
Ora configureremo il nostro server Confusione per utilizzare HTTPS in questo esercizio.
Quindi, procediamo avanti, prima di generare la chiave e
il certificato che possiamo usare per il nostro server e
poi modificare la nostra applicazione espressa per supportare HTTPS.
Per iniziare questo esercizio, andare alla cartella del server Confusione.
E poi nel tuo terminale o nella finestra di comando e
poi vai nella cartella bin all'interno della cartella del server Confusione.
E nella cartella bin vedrai un file chiamato www.
Questa è la cartella in cui stiamo andando a generare la nostra chiave privata e
quindi anche generare il certificato per il
nostro server HTTPS utilizzando uno strumento da riga di comando chiamato come OpenSSL.
Ora OpenSSL è in genere installato su macchine Mac OS per impostazione predefinita.
Per le macchine Windows potrebbe essere necessario scaricare e installare OpenSSL in modo esplicito.
Ora ho fornito un paio di link nelle istruzioni per andare a
prendere OpenSSL.
Ti ho anche fornito un sito web in cui puoi generare
chiave privata autofirmata e certificato.
Quindi andiamo a dare un'occhiata veloce a questo.
Se si esegue una macchina Windows e
se non si dispone di OpenSSL già installato.
Quindi questo link fornisce file binari per
OpenSSL che è possibile scaricare e installare sul computer Windows.
Quindi questo link è fornito nelle istruzioni per questo esercizio.
Quindi andando lì,
troverete diversi download di
distribuzioni OpenSSL di terze parti che è possibile scaricare e installare sul vostro computer.
Quindi installate uno di questi per procedere
con questo esercizio se non avete già OpenSSL sulla vostra macchina.
Ora, anche se vuoi un altro modo di
generare la tua chiave privata e il tuo certificato.
Ecco un articolo del blog, un link a cui ho già fornito nelle istruzioni,
che spiega anche come configurare la tua macchina Windows con
OpenSSL e generare anche la chiave privata e il certificato.
Quindi seguire questa procedura per configurare il computer Windows per
la generazione della chiave privata e del certificato.
Ora, se non vuoi installare OpenSSL, ecco un link
a un sito che ti permette di generare
lì certificato SSL autofirmato e chiave come vedi qui.
Quindi un link a questo sito è fornito anche nelle istruzioni.
In questo modo è possibile utilizzare il server per generare il certificato SSL e la
chiave per il computer Windows.
Quindi chiunque di questi approcci può essere utilizzato per
generare la chiave privata e il certificato per il tuo computer Windows.
Dal momento che sono in esecuzione su una macchina OSX,
genererò la mia chiave privata e il mio certificato usando OpenSSL.
Quindi, andando al terminale, lasciami digitare openssl genrsa
1024, il che significa che genererò una chiave privata di dimensione 1024.
Quindi ho intenzione di metterlo in un file chiamato chiave privata, e
una volta generato questo, allora genereremo il file cert.csr corrispondente in
modo che dirà la richiesta di req openssl.
Quindi stiamo chiedendo un nuovo certificato,
con la chiave private.key, e lo genererà.
Cert.CSR qui.
Ora, quando si genera il cert.csr, verrà con alcune
domande da compilare.
È possibile accettare i valori predefiniti oppure
è possibile inserire i propri valori se lo si è scelto.
Non importa perché questo certificato che stiamo usando solo all'interno del nostro
computer per testare il nostro server HTTPS.
Quindi, lasciatemi inserire alcuni dettagli.
Lascerò alcune cose vuote.
E funzionerebbe bene,
non importa se riempi queste informazioni o meno.
Quindi una volta fatto che il tuo cert.csr è generato e
da quello genererà il certificato di distribuzione, quindi
per questo digiteremo al prompt dei comandi
openssl x509 -req -in cert.csr -signkey
private.key -out certificate.pem.
Quindi questo genererà il certificato per
noi, e così una volta completati questi passaggi,
quando guardi la tua cartella,
vedrai che hai il private.key,
il cert.csr e certificate.pem lì dentro.
Questo sarà necessario per configurare il nostro server HTTPS.
Quindi, ora per configurare il server HTTPS, andiamo al nostro editor.
Nell' editor, andremo a questa cartella bin qui.
E nella cartella bin, vedrai questo file chiamato www.
Abbiamo esaminato brevemente questo file in uno degli esercizi precedenti.
Ora entrando in questo file stiamo andando
a importare anche il modulo principale HTTPS quindi
diremo HTTPS richiede HTTPS e
avremo anche bisogno del modulo del file system.
Hai già incontrato il modulo del file system
in precedenza in uno degli esercizi.
Quindi importeremo entrambi.
E poi, andando qui, configureremo il numero di porta in cui il nostro
server HTTPS sarà in esecuzione, quindi diremo app.set e
diremo SecPort.
Quindi stiamo andando a impostare una variabile qui chiamata porta sicura e
poi inizializzerò questo a port+443.
Ora, perché uso questa porta+443?
In un server standard, se il server agisce come server Web,
il protocollo HTTP verrà eseguito alla porta numero 80 del server.
E l'HTTP sicuro verrà eseguito sulla porta numero 443.
Ora normalmente non si desidera utilizzare quelle porte riservate
in un'applicazione di sviluppo, ma stiamo facendo in questo corso.
Invece, come hai visto in precedenza,
avevamo configurato il nostro numero di porta su 3000 dove il nostro server HTTP è in esecuzione.
Quindi eseguirò il server HTTPS, al numero di porta 3443.
Quindi 3000 più 443.
Quindi questo è il motivo per cui sto dichiarando questa porta sicura.
Come porta+443, quindi il nostro server HTTPS sarà in esecuzione alla porta numero 443.
Sarò ancora in esecuzione il server HTTP alla porta 3000,
abbiamo già creato il server HTTP qui nel WWW, o meglio,
questo viene generato automaticamente dal generatore espresso.
Ora, poiché il server HTTP è già configurato,
ora stiamo andando a configurare il server HTTPS.
Quindi, per configurare il server HTTPS, subito dopo aver configurato il server HTTP.
Ora il motivo per cui eseguirò ancora il server HTTP è che,
se ottengo una richiesta sulla porta del server HTTP,
quella richiesta verrà reindirizzata al server HTTPS.
Quindi il mio server richiederà solo la richiesta di servizio in arrivo sulle porte HTTPS.
Ma se per caso qualcuno accede al server alla porta HTTP,
reindirizzerò quella richiesta alla porta HTTPS.
Lo faremo un po' più tardi.
Innanzitutto, configuriamo il server HTTPS.
Quindi, per configurare il server HTTPS, proprio qui,
dichiaro alcune opzioni qui per il mio server HTTPS.
Ora ricorda che per un server HTTPS, abbiamo bisogno di configurare la chiave privata e
il certificato che il mio server HTTPS sta per utilizzare.
Quindi nelle opzioni, ho intenzione di specificare la chiave e
poi userò il file system e poi dirò, readFileSync.
Quindi leggerò questo file in modo sincrono in modo da completare la lettura nel file
prima di poter configurare il mio server HTTPS.
Quindi ho intenzione di leggere questo file da __dirname.
Sai già perché uso __dirname dagli
esercizi precedenti in cui abbiamo visto i cinque moduli di sistema utilizzati.
E poi, così dirò __dirname+.
Quindi qui, forniamo il percorso per private.key.
Ora, ricorda che questo www si trova nella cartella bin.
E private.key è anche nella cartella bin, quindi
è per questo che dirname+ questo, quindi questo specificherà
al modulo di lettura del file system che il file dovrebbe essere
letto da questa directory bin, da quel file private.key qui.
Ora anche, leggeremo nel certificato qui.
Quindi diremo, cert fs.readFileSync.
Quindi leggerà il file in modo sincrono,
il che significa che, il file verrà letto completamente prima di procedere a quel passaggio successivo qui.
E il file che dobbiamo leggere è anche __dirname+.
E diremo, /certificate.pem, che abbiamo generato in precedenza.
E che dovrebbe essere una virgola, e non dovrei mettere un punto e virgola lì,
perché questo è un oggetto JavaScript che abbiamo definito ha le opzioni.
Quindi, una volta definito l'oggetto JavaScript, allora cerchiamo di configurare il server sicuro.
Quindi diremo var SecureServer https.
Ricordiamo che, ora, useremo https, e poi diremo CreateServer.
Quindi ricorda che per HTTP, abbiamo configurato il nostro server in questo modo qui.
Per il server sicuro, stiamo andando a creare che dicendo,
var SecureServer HTTPS.CreateServer, e poi forniremo
le opzioni che abbiamo appena configurato e poi la seconda parte è app qui.
Quindi il mio SecureServer
sta bene, sarà anche disponibile per l'accesso alla mia app.
Ora qui sotto, ho intenzione di configurare
SecureServer.Listen sul numero di porta,
SecPort.
Ricordiamo che qui avevamo fatto un secPort app.set, quindi
impostiamo questo valore qui al numero di porta sicuro.
E poi qui sotto, stiamo dicendo app.get.
Quindi questo significa che questo valore che abbiamo
configurato in precedenza sarà disponibile per
noi per configurare la nostra porta di ascolto per
il nostro server, app.get SecPort, e
quindi fornire la, funzione di callback qui.
E all'interno di questa funzione di callback, diremo,
console.log Server in ascolto sulla porta.
Facciamo ascolto server sicuro sulla porta
e poi, una volta configurato il SecureServer,
allora abbiamo bisogno di, Vedi, SecureServer su.
Quindi, se il SecureServer riceve un evento di errore,
allora ci piacerà l'onError, che è configurato di seguito, per gestirlo.
E poi diremo, SecureServer.On.
Ascoltando, quindi se ricevi l'evento di ascolto,
chiameremo onListening.
Ora dove sono configurati questi onError e onListening?
Se entri nel codice qui, qui sotto.
Stai specificando queste due funzioni che la funzione OnError qui,
e quindi la funzione OnListening qui.
Quindi stiamo andando a utilizzare queste due funzioni per configurare il nostro server qui.
Quindi, con queste modifiche,
il mio server è ora configurato per eseguire anche SecureServer alla porta numero 443.
Abbiamo già configurato il server HTTP standard qui già.
Quindi, una volta che abbiamo fatto questi due, quindi, il nostro prossimo aggiornamento sarà nel file app.js.
Quindi andando al file app.js Quello che ho intenzione di fare è configurare questo
server in modo tale che reindirizzerà qualsiasi traffico che arriva alla porta non sicura.
Quella è la porta numero 3.000, reindirizzerà quella richiesta alla porta sicura.
Quindi, per farlo, lasciami impostare un middleware subito dopo aver dichiarato l'app.express.
Quindi qui diremo, app.all, quindi il che significa, per
tutte le richieste, indipendentemente dal percorso nella richiesta. La
propria richiesta in arrivo, ho intenzione di reindirizzarlo a,
Quindi diremo rec, res, next, e
la funzione di richiamo definita qui.
E così faremo, Dichiarare la funzione qui dentro.
E diremo, se req.secure.
Quindi significa che, se la richiesta in arrivo è già una richiesta sicura,
quindi come facciamo a saperlo?
Se la richiesta in arrivo è già una richiesta sicura, l'
oggetto richiesta porterà questo flag chiamato sicuro che sarà già impostato su true.
Se la richiesta in arrivo non è affatto una porta sicura ma
viene invece verso la porta non sicura, allora write.secure non verrà impostato.
Quindi, e' di questo che mi sto occupando.
Se sta già arrivando alla porta sicura, ho intenzione di andare avanti
senza fare nulla perché sta già arrivando al porto sicuro.
Quindi posso semplicemente dire, il prossimo.
Altrimenti, quindi diremo, torna dopo.
In caso contrario, in modo che il contrario si verificherà,
Quando si tratta della porta insicura.
Quindi, in questo caso, dirò res.redirect.
Quindi è disponibile il metodo di reindirizzamento,
che reindirizza la richiesta in entrata a un altro URL.
Quindi, reindirizzerò questa richiesta insicura a https://.
Quindi sto reindirizzando questa richiesta al nome, req.host.
Quindi la richiesta porterà già il nome host.
Quindi, perché questo sta arrivando allo stesso server, quindi
sto reindirizzando allo stesso server.
E poi diremo +,
; + app.get.
Ora ricordiamo che avevamo già configurato la porta sicura nell'app.get lì.
Quindi diremo app.get SecPort + req.url.
Ora questo req.url conterrà il resto del percorso
tranne il nome host e il numero di porta.
Quindi, se dici un localhost: 3000,
quel localhost: 3000 sarà coperto dalla prima parte e
questo sarà reindirizzato a localhost: 3443 da questa configurazione qui.
E poi, il resto, il req.url conterrà il percorso effettivo sul server.
Quindi, lo aggiungiamo al percorso di reindirizzamento, e
questo è il percorso a cui reindirizzerò il messaggio di richiesta in arrivo.
Quindi, una volta reindirizzato il messaggio di richiesta in arrivo,
il mio messaggio di richiesta verrà reindirizzato alla porta protetta.
E un ultimo cambiamento potrebbe res.redirect,
aggiungeremo il codice di stato scritto come 307.
307 qui rappresenta che la risorsa di destinazione risiede temporaneamente sotto
URL diversi.
E l'agente utente non deve modificare il metodo di richiesta se si
riforma nel reindirizzamento automatico a quell'URL.
Quindi, mi aspetto che l'agente utente riprovi
con lo stesso metodo che hanno usato per l'endpoint originale.
Questo è tutto, che la modifica che ho bisogno di fare nel file app.js.
Quindi, dopo aver cambiato app.js e www, e
anche generato la chiave e il certificato,
ora possiamo salvare le modifiche e andare e avviare il nostro server.
Passando al terminale o alla finestra dei comandi, assicurarsi di essere di
nuovo nella cartella ConfusionServer e quindi avviare il server.
Quindi sono al terminale a digitare npm start.
E il vostro server sarà attivo e funzionante, e si nota anche che stiamo stampando
qui dicendo, Secure Server in ascolto sulla porta numero 3443 qui.
Per accentuare il server sicuro, vai a un browser come Chrome qui.
E poi, lasciami prima accedere al server sicuro su
localhost: 3443 che è dove il mio server sicuro è in esecuzione.
E si noti che quando provo il https://localhost3443 nel browser,
verrà fuori con questo messaggio qui dicendo, La tua connessione non è privata.
Ovviamente, perché il certificato che stiamo usando in questo momento
è un certificato autofirmato.
E questo non è riconosciuto da Chrome come certificato valido.
Ma dato che sappiamo cosa stiamo facendo, va bene per noi accettare
che stiamo per permettere di procedere a questo particolare server.
Ora, ti consiglierò vivamente di non farlo mai su
nessun sito che viene fuori con il suggerimento.
Lo stiamo facendo specificamente in questo esercizio perché
sappiamo esattamente dove si trova il server, e
sappiamo che abbiamo configurato esplicitamente il server noi stessi.
Ma se qualche altro sito web viene fuori con questo messaggio,
ti consiglio vivamente di non accettare il suggerimento e procedere all'accesso al server.
Quindi dovresti tornare in sicurezza se mai vedi questo o su qualsiasi altro sito web.
Ma dal momento che sappiamo che questo è il nostro server, ho intenzione di procedere
al localhost qui, e poi si vedrebbe che stiamo accedendo al server Express.
E anche si noterà qui
che il browser sta mostrando che si sta accedendo a un server non sicuro.
Quando si fa clic su questo, si vedrebbe il messaggio
qui che dice che la connessione al sito non è sicura.
Ma sappiamo che dal momento che stiamo eseguendo il server da soli, questo va bene farlo.
Quindi questo è il modo in cui si accede al server HTTPS.
Ora, permettetemi di provare ad accedere allo stesso server HTTP ma, permettetemi di accedere al,
standard localhost: 3000.
Questo è dove il nostro server insicuro sono al normale server HTTP è in esecuzione.
Quindi, quando provo ad accedere a quel localhost HTTP: 3000,
vedi immediatamente che il mio server mi reindirizzerà al server sicuro.
Così in questo modo, il server che abbiamo appena configurato
garantire che si sarà sempre accedere al server sulla sua porta sicura.
Ciò garantisce anche il fatto che, quando si scambiano,
quando si inviano le credenziali, e così via,
tutto lo scambio delle credenziali nell'intestazione del messaggio.
E anche quando si accede con l'autenticazione locale, tutto ciò viene fatto in
modo sicuro in un canale crittografato tra il client e il server.
Quindi, ora, abbiamo configurato il nostro server per essere un server HTTPS sicuro.
Con questo, completiamo questo esercizio.
In questo esercizio, abbiamo imparato come configurare un server HTTP sicuro o
utilizzare il protocollo HTTPS.
Con questo, completiamo questo esercizio.
Questo è un buon momento per fare un commit git con il messaggio, HTTPS.
[ MUSIC]