[MUSIC]
En la conferencia anterior aprendimos acerca de HTTPS y cómo pueden llevar a cabo
una comunicación segura entre el cliente y el servidor.
También aprendimos un poco sobre criptografía,
lo suficiente para entender cómo funciona HTTPS.
Para que podamos configurar nuestro servidor HTTP,
necesitamos obtener una clave pública y un certificado.
Ahora configuraremos nuestro servidor ConFusion para que utilice HTTPS en este ejercicio.
Por lo tanto, vamos a continuar, primero para generar la clave y
el certificado que podemos usar para nuestro servidor y
luego modificar nuestra aplicación express para admitir HTTPS.
Para comenzar en este ejercicio, vaya a la carpeta del servidor ConFusion.
Y luego en su terminal o ventana de comandos y
luego vaya a la carpeta bin dentro de la carpeta del servidor ConFusion.
Y en la carpeta bin verá un archivo llamado www.
Esta es la carpeta donde vamos a generar nuestra clave privada y
luego generar el certificado para
nuestro servidor HTTPS usando una herramienta de línea de comandos llamada OpenSSL.
Ahora OpenSSL se instala normalmente en máquinas Mac OS de forma predeterminada.
Para máquinas con Windows es posible que necesite descargar e instalar OpenSSL explícitamente.
Ahora he proporcionado un par de enlaces en las instrucciones para que vaya a
buscar OpenSSL.
También le he proporcionado un sitio web donde puede generar una
clave privada autofirmada y un certificado.
Así que vamos a echar un vistazo rápido a eso.
Si está ejecutando una máquina con Windows y
si no tiene OpenSSL ya instalado.
A continuación, este enlace proporciona archivos binarios para
OpenSSL que puede descargar e instalar en su computadora con Windows.
Entonces, este enlace se proporciona en las instrucciones para este ejercicio.
Así que entrando allí,
encontrarás varias descargas de
distribuciones relacionadas con OpenSSL de terceros que puedes descargar e instalar en tu ordenador.
Por lo tanto, instale uno de estos para continuar
con este ejercicio si no tiene OpenSSL ya en su máquina.
Ahora, también si desea otra forma de
generar su clave privada y certificado.
Aquí hay un artículo de blog, un enlace al que ya he proporcionado en las instrucciones,
que explica también cómo configurar su máquina Windows con
OpenSSL y también generar la clave privada y el certificado.
Por lo tanto, siga estos pasos para configurar su máquina Windows para
generar la clave privada y el certificado.
Ahora, si no desea instalar OpenSSL, aquí hay un enlace
a un sitio que le permite generar
allí certificado SSL autofirmado y clave como se ve aquí.
Por lo tanto, un enlace a este sitio también se proporciona en las instrucciones.
Por lo tanto, puede usar el servidor para generar el certificado SSL y
la clave para su máquina Windows.
Por lo tanto, cualquiera de estos enfoques se puede usar para
generar la clave privada y el certificado para su computadora con Windows.
Como me estoy ejecutando en una máquina OSX,
voy a generar mi clave privada y mi certificado usando OpenSSL.
Así que yendo a la terminal, déjame escribir openssl genrsa
1024, lo que significa que voy a generar una clave privada de tamaño 1024.
Así que voy a poner esto en un archivo llamado clave privada, y
una vez que se genera esto, entonces generaremos el archivo cert.csr correspondiente
para que diga openssl req request.
Así que estamos solicitando un nuevo certificado,
con la clave private.key, y generará eso.
Cert.CSR aquí.
Ahora, cuando genere el cert.csr, surgirá algunas preguntas
para que complete.
Puede aceptar los valores predeterminados o
puede rellenar sus propios valores si así lo decide.
Realmente no importa porque este certificado que estamos utilizando sólo dentro de nuestro
ordenador para probar nuestro servidor HTTPS.
Por lo tanto, permítanme completar algunos detalles.
Voy a dejar algunas de las cosas vacías allí.
Y eso funcionaría muy
bien, realmente no importa si rellenas esta información o no.
Así que una vez que haga que se genere su cert.csr y
a partir de eso generarán el certificado de distribución,
por lo que escribiremos en el símbolo del sistema
openssl x509 -req -in cert.csr -signkey
private.key -out certificate.pem.
Así que esto generará el certificado para
nosotros, y una vez que complete estos pasos,
cuando mire su carpeta,
verá que tiene el private.key,
el cert.csr y certificate.pem allí.
Esto será necesario para configurar nuestro servidor HTTPS.
Por lo tanto, ahora para configurar el servidor HTTPS, vamos a nuestro editor.
En el editor, iremos a esta carpeta bin aquí.
Y en la carpeta bin, verá este archivo llamado www.
Revisamos brevemente este archivo en uno de los ejercicios anteriores.
Ahora entrando en este archivo vamos
a importar también el módulo central HTTPS, así que
vamos a decir que HTTPS requiere HTTPS Y
también requerimos el módulo del sistema de archivos.
Ya ha encontrado el módulo del sistema de archivos anteriormente
en uno de los ejercicios.
Así que importaremos ambos.
Y luego, bajando aquí, configuraremos el número de puerto en el que
se ejecutará nuestro servidor HTTPS, así que diremos app.set y
diremos SecPort.
Así que vamos a configurar una variable aquí llamada puerto seguro y
luego inicializaré esto al puerto+443.
Ahora, ¿por qué uso este puerto+443?
En un servidor estándar, si el servidor actúa como servidor web, el
protocolo HTTP se ejecutará en el puerto número 80 del servidor.
Y el HTTP seguro se ejecutará en el puerto número 443.
Ahora normalmente no querría usar esos puertos reservados
en una aplicación de desarrollo, pero lo estamos haciendo en este curso.
En su lugar, como vio anteriormente,
habíamos configurado nuestro número de puerto en 3000 donde se está ejecutando nuestro servidor HTTP.
Así que voy a ejecutar el servidor HTTPS, en el puerto número 3443.
Así que 3000 más 443.
Así que esa es la razón por la que declaro este puerto seguro.
Como puerto+443, nuestro servidor HTTPS se ejecutará en el puerto número 443.
Todavía estaré ejecutando el servidor HTTP en el puerto 3000,
ya hemos creado el servidor HTTP aquí en el WWW, o más bien,
esto es generado automáticamente por el generador express.
Ahora, dado que el servidor HTTP ya está configurado,
ahora vamos a configurar el servidor HTTPS.
Entonces, para configurar el servidor HTTPS, justo después de configurar el servidor HTTP.
Ahora la razón por la que todavía voy a ejecutar el servidor HTTP es que,
si recibo una solicitud en el puerto del servidor HTTP,
esa solicitud será redirigida al servidor HTTPS.
Por lo tanto, mi servidor solo prestará servicio a los puertos HTTPS.
Pero si por casualidad alguien accede al servidor en el puerto HTTP,
redirigiré esa solicitud al puerto HTTPS.
Haremos eso un poco más tarde.
Primero, vamos a configurar el servidor HTTPS.
Entonces, para configurar el servidor HTTPS, aquí mismo,
declararé algunas opciones aquí para mi servidor HTTPS.
Ahora recuerde que para un servidor HTTPS, necesitamos configurar la clave privada y
el certificado que mi servidor HTTPS va a usar.
Entonces, en las opciones, voy a especificar clave y
luego voy a usar el sistema de archivos y luego voy a decir, ReadFileSync.
Así que leeré este archivo sincrónicamente para completar la lectura en el archivo
antes de poder configurar mi servidor HTTPS.
Así que voy a leer este archivo de __dirname.
Ya sabes por qué utilizo __dirname de los
ejercicios anteriores donde vimos el módulo de cinco sistemas que se estaba utilizando.
Y luego, así que voy a decir __dirname+.
Entonces, aquí, proporcionamos la ruta al private.key.
Ahora, recuerde que este www está en la carpeta bin.
Y el private.key también está en la carpeta bin, así
que es por eso que voy a decir dirname+ esto, por lo que esto especificará
al módulo de lectura del sistema de archivos que el archivo debe
leerse desde este directorio bin, desde ese archivo private.key aquí.
Ahora también, leeremos en el certificado aquí.
Así que diremos, cert fs.readFileSync.
Así que leerá sincrónicamente el archivo, lo que significa que,
el archivo se leerá por completo antes de continuar con ese siguiente paso aquí.
Y el archivo que necesitamos leer es también __dirname+.
Y diremos, /certificate.pem, que hemos generado anteriormente.
Y eso debería ser una coma, y no debería poner un punto y coma allí,
porque este es un objeto JavaScript que hemos definido tiene las opciones.
Entonces, una vez que definamos el objeto JavaScript, entonces vamos a configurar el servidor seguro.
Entonces diremos var SecureServer https.
Recordemos que, ahora, vamos a usar https, y luego diremos CreateServer.
Así que recuerde que para HTTP, configuramos nuestro servidor así aquí.
Para el servidor seguro, vamos a crear eso diciendo,
var SecureServer Https.CreateServer, y luego vamos a proporcionar
las opciones que acabamos de configurar y luego la segunda parte es la aplicación aquí.
Entonces mi SecureServer está bien,
también estará disponible para que mi aplicación pueda acceder.
Ahora abajo aquí, voy a configurar
el secureserver.Escuche en el número de puerto,
SecPort.
Recordemos que aquí habíamos hecho un app.set SecPort, así que
establecemos este valor aquí al número de puerto seguro.
Y luego abajo aquí, estamos diciendo app.get.
Esto significa que este valor que hemos
configurado anteriormente estará disponible
para configurar nuestro puerto de escucha para
nuestro servidor, app.get SecPort, y
luego suministrar la función de devolución de llamada aquí.
Y dentro de esta función de devolución de llamada, diremos,
console.log Server escuchando en el puerto.
Vamos a hacer escuchar servidor seguro en el puerto
Y luego, una vez que configuramos el SecureServer,
entonces tenemos que, Ver, SecureServer en.
Entonces, si SecureServer recibe un evento de error,
entonces nos gustará OnError, que se configura a continuación, para manejar eso.
Y luego diremos, Secureserver.on.
Escuchando, así que si usted recibe el evento de escucha,
entonces llamaremos a OnListening.
Ahora, ¿dónde están configurados estos OnError y OnListening?
Si usted entra en el código aquí, abajo aquí abajo.
Está especificando estas dos funciones que función OnError aquí,
y luego la función OnListening aquí.
Así que vamos a usar estas dos funciones para configurar nuestro servidor aquí.
Por lo tanto, con estos cambios,
mi servidor ahora está configurado para ejecutar también SecureServer en el puerto número 443.
Ya hemos configurado el servidor HTTP estándar aquí.
Así que una vez que hayamos hecho estos dos, entonces, nuestra próxima actualización estará en el archivo app.js.
Así que voy al archivo app.js Lo que voy a hacer es configurar
este servidor para que redirija cualquier tráfico que llegue al puerto inseguro.
Ese es el puerto número 3.000, redirigirá esa solicitud al puerto seguro.
Entonces, para hacer eso, permítanme configurar un middleware justo después de declarar la app.express.
Así que aquí diremos, app.all, lo que significa, para
todas las solicitudes sin importar cuál sea la ruta en la solicitud.
Propia solicitud entrando, voy a redirigir eso a,
Así que diremos rec, res, siguiente, y
la función de devolución de llamada que se define aquí.
Y así, declararemos la función aquí dentro.
Y diremos, si req.secure.
Entonces, lo que significa que, si la solicitud entrante ya es una solicitud segura,
entonces, ¿cómo sabemos eso?
Si la solicitud entrante ya es una solicitud segura, entonces el
objeto de solicitud llevará este indicador llamado secure que ya estará establecido en true.
Si la solicitud entrante no es en absoluto puerto seguro,
sino que viene al puerto inseguro, entonces no se establecerá write.secure.
Así que, eso es lo que me estoy ocupando.
Si ya está llegando al puerto seguro, voy a seguir adelante
sin hacer nada porque ya está llegando al puerto seguro.
Así que puedo decir sencillamente, lo siguiente.
De lo contrario, así que diremos, regresa a continuación.
De lo contrario, por lo que ocurrirá lo contrario,
Cuando se trata de llegar al puerto inseguro.
Entonces, en este caso, diré res.redirect.
Por lo tanto, el método de redirección está disponible,
que redirige la solicitud entrante a otra URL.
Por lo tanto, redirigiré esta solicitud insegura a https://.
Así que estoy redirigiendo esta solicitud al nombre, req.host.
Por lo tanto, la solicitud ya llevará el nombre de host.
Entonces, porque esto viene al mismo servidor, así que
estoy redirigiendo al mismo servidor.
Y luego diremos +,
; + app.get.
Ahora recuerde que ya habíamos configurado el puerto seguro en la app.get allí.
Entonces diremos app.get SecPort + req.url.
Ahora este req.url contendrá el resto de la ruta
excepto el nombre de host y el número de puerto.
Entonces, si dices un localhost: 3000,
ese localhost: 3000 estará cubierto por la primera parte y
esto será redirigido a localhost: 3443 por esta configuración aquí.
Y luego, el resto, el req.url contendrá la ruta real en el servidor.
Por lo tanto, simplemente lo agregamos a la ruta de redirección, y
esta es la ruta a la que voy a redirigir el mensaje de solicitud entrante.
Entonces, una vez que redirija el mensaje de
solicitud entrante, mi mensaje de solicitud será redirigido al puerto seguro.
Y un último cambio podría res.redireccionar,
agregaremos el código de estado escrito como 307.
307 aquí representa que el recurso de destino reside temporalmente en una
URL diferente.
Y el agente de usuario no debe cambiar el método de solicitud si
se redirecciona automáticamente a esa URL.
Por lo tanto, esperaré que el agente de usuario vuelva a intentar
con el mismo método que han utilizado para el punto final original.
Eso es todo, que el cambio que necesito hacer en el archivo app.js.
Entonces, después de haber cambiado el app.js y el www, y
también generado la clave y el certificado,
ahora podemos guardar los cambios e ir e iniciar nuestro servidor. Al
ir al terminal o a la ventana de comandos, asegúrese de que está de
vuelta en la carpeta ConfusionServer y, a continuación, inicie el servidor.
Así que estoy en la terminal escribiendo npm start.
Y su servidor estará en funcionamiento, y también notará que estamos imprimiendo
aquí diciendo, Servidor seguro escuchando en el puerto número 3443 aquí.
Para acentuar el servidor seguro, ve a un navegador como Chrome aquí.
Y luego, primero permítanme acceder al servidor seguro en
localhost: 3443, que es donde se ejecuta mi servidor seguro.
Y observe que cuando pruebo el https://localhost3443 en el navegador,
aparecerá este mensaje aquí diciendo: Su conexión no es privada.
Obviamente, porque el certificado que estamos usando en este momento
es un certificado autofirmado.
Y esto no es reconocido por Chrome como un certificado válido.
Pero ya que sabemos lo que estamos haciendo, está bien
que aceptemos que vamos a permitir proceder a este servidor en particular.
Ahora, le aconsejaré encarecidamente que nunca haga esto en
ningún sitio que surja la sugerencia.
Estamos haciendo esto específicamente en este ejercicio porque
sabemos exactamente dónde está el servidor, y
sabemos que hemos configurado explícitamente el servidor nosotros mismos.
Pero si cualquier otro sitio web aparece con este mensaje,
le aconsejo encarecidamente que no acepte la sugerencia y proceda a acceder al servidor.
Por lo tanto, debe volver a la seguridad si alguna vez ve esto o en cualquier otro sitio web.
Pero ya que sabemos que este es nuestro propio servidor, voy a proceder
al localhost aquí, y luego verías que estamos accediendo al servidor Express.
Y también notarías aquí arriba
que tu navegador te muestra que estás accediendo a un servidor inseguro.
Cuando haga clic en eso, verá ese mensaje
aquí diciendo que su conexión con el sitio no es segura.
Pero sabemos que ya que estamos ejecutando el servidor nosotros mismos, esto está bien hacerlo.
Entonces así es como estarías accediendo al servidor HTTPS.
Ahora, permítanme intentar acceder al mismo servidor HTTP pero, déjeme acceder al,
localhost estándar: 3000.
Aquí es donde nuestro servidor inseguro se encuentra al servidor HTTP normal que se está ejecutando.
Entonces, cuando intento acceder a ese HTTP localhost: 3000,
inmediatamente ve que mi servidor me redirigirá al servidor seguro.
Así que de esta manera, su servidor que acabamos de configurar
asegurará que siempre tendrá acceso al servidor en su puerto seguro.
Esto también garantiza el hecho de que, cuando está intercambiando,
cuando está enviando sus credenciales, etc.,
todo el intercambio de las credenciales en el encabezado del mensaje.
Y también cuando inicia sesión con la autenticación local, todo lo que se hace de
manera segura en un canal cifrado entre su cliente y el servidor.
Por lo tanto, ahora, hemos configurado nuestro servidor para que sea un servidor HTTPS seguro.
Con esto, completamos este ejercicio.
En este ejercicio, hemos aprendido cómo configurar un servidor HTTP seguro o
usar el protocolo HTTPS.
Con esto, completamos este ejercicio.
Este es un buen momento para que hagas una confirmación de git con el mensaje, HTTPS.
[ MÚSICA]