[MÚSICA]
Na palestra anterior, aprendemos sobre HTTPS e como eles podem realizar uma
comunicação segura entre o cliente e o servidor.
Também aprendemos um pouco sobre criptografia,
o suficiente para entender como HTTPS funciona.
Para que possamos configurar nosso servidor HTTP,
precisamos obter uma chave pública e um certificado.
Agora vamos configurar o nosso servidor ConfUSIC para usar HTTPS neste exercício.
Então, vamos avançar, primeiro para gerar a chave e
o certificado que podemos usar para o nosso servidor e,
em seguida, modificar nossa aplicação expressa para suportar HTTPS.
Para começar este exercício, vá para a pasta do servidor Confusion.
E, em seguida, no terminal ou na janela de comando e
, em seguida, vá para a pasta bin dentro da pasta do servidor Confusion.
E na pasta bin você verá um arquivo chamado www.
Esta é a pasta onde vamos gerar nossa chave privada e, em
seguida, também gerar o certificado para o
nosso servidor HTTPS usando uma ferramenta de linha de comando chamada como OpenSSL.
Agora, o OpenSSL é normalmente instalado em máquinas Mac OS por padrão.
Para máquinas Windows, você pode precisar baixar e instalar o OpenSSL explicitamente.
Agora eu forneci alguns links nas instruções para você ir e
buscar OpenSSL.
Eu também forneci um site onde você pode gerar
chave privada auto-assinada e certificado.
Então vamos dar uma olhada rápida nisso.
Se você estiver executando um computador Windows e
se você não tiver OpenSSL já instalado.
Em seguida, este link fornece binários para
OpenSSL que você pode baixar e instalar em sua máquina Windows.
Portanto, este link é fornecido nas instruções para este exercício.
Então, indo lá,
você vai encontrar vários downloads de
distribuições relacionadas OpenSSL de terceiros que você pode baixar e instalar em seu computador.
Então instale um destes para prosseguir
com este exercício se você não tem OpenSSL já em sua máquina.
Agora, também se você quiser outra maneira de
gerar sua chave privada e certificado.
Aqui está um artigo de blog, um link para o qual eu já forneceu nas instruções,
que explica também como configurar sua máquina Windows com
OpenSSL e também gerar a chave privada e o certificado.
Portanto, percorra essas etapas para configurar seu computador Windows para
gerar a chave privada e o certificado.
Agora, se você não quiser instalar OpenSSL, então aqui está um link
para um site que permite que você gere
lá certificado SSL auto-assinado e chave como você vê aqui.
Portanto, um link para este site também é fornecido nas instruções.
Assim, você pode usar o servidor para gerar o certificado SSL e a
chave para sua máquina Windows.
Portanto, qualquer uma dessas abordagens pode ser usada para
gerar a chave privada e o certificado para sua máquina Windows.
Como estou executando em uma máquina OSX,
vou gerar minha chave privada e certificado usando OpenSSL.
Então, indo para o terminal, deixe-me digitar openssl genrsa
1024, o que significa que eu vou gerar uma chave privada de tamanho 1024.
Então eu vou colocar isso em um arquivo chamado chave privada, e uma
vez que isso é gerado, em seguida, vamos gerar o arquivo cert.csr correspondente
para que ele vai dizer openssl req request.
Então, estamos solicitando um novo certificado,
com a chave private.key, e ele irá gerar isso.
Cert.CSR aqui.
Agora, quando você gerar o cert.csr, ele vai aparecer com algumas perguntas
para você preencher.
Você pode aceitar os valores padrão ou
você pode preencher seus próprios valores se você assim escolher.
Isso realmente não importa porque este certificado que estamos usando apenas dentro do nosso
computador para testar nosso servidor HTTPS.
Então, deixe-me preencher alguns detalhes.
Vou deixar algumas coisas vazias lá.
E isso funcionaria muito bem,
não importa se você preenche essa informação ou não.
Então, uma vez que você faz que seu cert.csr é gerado e a
partir disso eles irão gerar o certificado de distribuição
para que nós vamos digitar no prompt de comando
openssl x509 -req -in cert.csr -signkey
private.key -out certificate.pem.
Então isso irá gerar o certificado para
nós, e assim que você concluir essas etapas,
quando você olhar para sua pasta,
você verá que você tem o private.key,
o cert.csr e o certificate.pem lá.
Isso será necessário para configurar nosso servidor HTTPS.
Então, agora para configurar o servidor HTTPS, vamos para o nosso editor.
No editor, vamos para esta pasta bin aqui.
E na pasta bin, você verá esse arquivo chamado www.
Analisamos brevemente este arquivo em um dos exercícios anteriores.
Agora, indo
para este arquivo, vamos agora também importar o módulo núcleo HTTPS então
vamos dizer HTTPS requer HTTPS E
também vamos exigir o módulo do sistema de arquivos.
Você já encontrou o módulo do sistema de arquivos anteriormente
em um dos exercícios.
Então vamos importar os dois.
E então, indo para baixo aqui, vamos configurar o número da porta em que nosso
servidor HTTPS será executado, então vamos dizer app.set e
vamos dizer SecPort.
Então vamos configurar uma variável aqui chamada porta segura e, em
seguida, eu vou inicializar isso para porta+443.
Agora, por que eu uso esta porta+443?
Em um servidor padrão, se o servidor estiver atuando como um servidor web,
seu protocolo HTTP será executado na porta número 80 do servidor.
E o HTTP seguro será executado na porta número 443.
Agora você normalmente não gostaria de usar essas portas reservadas
em um aplicativo de desenvolvimento, mas estamos fazendo neste curso.
Em vez disso, como você viu anteriormente,
configuramos nosso número de porta para 3000 onde nosso servidor HTTP está sendo executado.
Então eu vou estar executando o servidor HTTPS, na porta número 3443.
Então 3000 mais 443.
Então é por isso que estou declarando este porto seguro.
Como porta+443, então nosso servidor HTTPS será executado na porta número 443.
Eu ainda estarei executando o servidor HTTP na porta 3000,
nós já criamos o servidor HTTP aqui na WWW, ou melhor,
isso é gerado automaticamente pelo gerador express.
Agora, uma vez que o servidor HTTP já está configurado,
vamos agora configurar o servidor HTTPS.
Então, para configurar o servidor HTTPS, logo após configurar o servidor HTTP.
Agora a razão pela qual eu ainda vou executar o servidor HTTP é que,
se eu receber uma solicitação na porta do servidor HTTP, em seguida,
essa solicitação será redirecionada para o servidor HTTPS.
Portanto, o meu servidor irá apenas solicitar o serviço que entra nas portas HTTPS.
Mas se por acaso alguém acessar o servidor na porta HTTP,
eu redirecionarei essa solicitação para a porta HTTPS.
Faremos isso um pouco mais tarde.
Primeiro, vamos configurar o servidor HTTPS.
Então, para configurar o servidor HTTPS, aqui mesmo,
vou declarar algumas opções aqui para o meu servidor HTTPS.
Agora lembre-se que para um servidor HTTPS, precisamos configurar a chave privada e
o certificado que meu servidor HTTPS vai usar.
Então, nas opções, eu vou especificar chave e, em
seguida, eu vou usar o sistema de arquivos e, em seguida, eu vou dizer, ReadFileSync.
Então eu vou ler este arquivo de forma síncrona para que eu vou completar a leitura no arquivo
antes de eu poder configurar meu servidor HTTPS.
Então eu vou ler este arquivo de __dirname.
Você já sabe por que eu uso __dirname dos
exercícios anteriores onde vimos o módulo de cinco sistemas sendo usado.
E então, então eu vou dizer __dirname+.
Então, aqui, nós fornecemos o caminho para o private.key.
Agora, lembre-se que este www está na pasta bin.
E o private.key também está na pasta bin, então
é por isso que eu vou dizer dirname+ isto, então isso irá especificar
para o módulo de leitura do sistema de arquivos que o arquivo deve ser
lido a partir deste diretório bin, a partir desse arquivo private.key aqui.
Agora também, vamos ler no certificado aqui.
Então vamos dizer, cert fs.readFileSync.
Assim, ele irá ler arquivo de forma
síncrona, o que significa que, o arquivo será lido completamente antes de prosseguir para o próximo passo aqui.
E o arquivo que precisamos ler também é __dirname+.
E diremos, /certificate.pem, que geramos anteriormente.
E isso deve ser uma vírgula, e eu não deveria colocar um ponto-e-vírgula lá,
porque este é um objeto JavaScript que definimos tem as opções.
Então, uma vez que definimos o objeto JavaScript, então vamos configurar o servidor seguro.
Então, vamos dizer var SecureServer https.
Lembre-se que, agora, vamos estar usando https, e então vamos dizer CreateServer.
Então lembre-se que para HTTP, nós configuramos nosso servidor assim aqui.
Para o servidor seguro, vamos criar isso dizendo,
var SecureServer https.CreateServer, e então vamos fornecer
as opções que acabamos de configurar e, em seguida, a segunda parte é o aplicativo aqui.
Então meu SecureServer está bem,
também estará disponível para o meu aplicativo acessar.
Agora abaixo aqui, vou configurar
o SecuReserver.Listen no número da porta,
SecPort.
Lembre-se que aqui nós tínhamos feito um secPort app.set, então
nós definimos este valor aqui para o número da porta segura.
E, em seguida, abaixo aqui, estamos dizendo app.get.
Então isso significa que esse valor que
configuramos anteriormente estará disponível
para nós para configurar nossa porta de escuta para o
nosso servidor, app.get SecPort e,
em seguida, fornecer a função Callback aqui.
E dentro desta função de retorno de chamada, vamos dizer,
console.log Server escutando na porta.
Vamos fazer o servidor de escuta segura na porta
E então, uma vez que configuramos o SecureServer,
então precisamos, Veja, SecureServer ligado.
Então, se o SecureServer recebe um evento de erro,
então vamos gostar do OnError, que está configurado abaixo, para lidar com isso.
E então vamos dizer, Secureserver.on.
Ouvindo, então se você receber o evento de escuta,
então vamos chamar o OnListening.
Agora, onde esses OnError e OnListening estão configurados?
Se você entrar no código aqui, abaixo aqui.
Você está especificando essas duas funções que a função OnError aqui
e, em seguida, a função OnListening aqui.
Então vamos usar essas duas funções para configurar nosso servidor aqui.
Assim, com essas alterações,
meu servidor agora está configurado para executar também o SecureServer na porta número 443.
Já configuramos o servidor HTTP padrão aqui.
Então, uma vez que tenhamos feito esses dois, então, nossa próxima atualização será no arquivo app.js.
Então, indo para o arquivo app.js O que eu vou fazer é configurar este
servidor de modo que ele irá redirecionar qualquer tráfego vindo para a porta insegura.
Essa é a porta número 3.000, vai redirecionar o pedido para a porta segura.
Então, para fazer isso, deixe-me configurar um middleware logo após declararmos o app.express.
Então, aqui vamos dizer, app.all, então o que significa, para
todas as solicitações, não importa qual o caminho na solicitação é.
Próprio pedido chegando, eu vou redirecionar isso para,
então vamos dizer rec, res, em seguida, e
a função de retorno de chamada sendo definida aqui.
E então vamos, Declarar a função aqui dentro.
E diremos, se req.secure.
Então, o que significa que, se o pedido de entrada já é um pedido seguro,
então como sabemos isso?
Se a solicitação de entrada já é uma solicitação segura, então o
objeto de solicitação carregará esse sinalizador chamado secure que já será definido como true.
Se a solicitação de entrada não é de todo porta segura, mas
em vez disso está chegando à porta insegura, então a write.secure não será definida.
Então, é disso que estou cuidando.
Se ele já está chegando ao porto seguro, eu vou seguir em frente
sem fazer nada porque ele já está chegando ao porto seguro.
Então eu posso dizer, em seguida.
Caso contrário, então diremos, volte em seguida.
Caso contrário, então o caso contrário ocorrerá,
Quando ele está vindo para a porta insegura.
Então, neste caso, vou dizer res.redirect.
Portanto, o método de redirecionamento está disponível, o
que redireciona a solicitação de entrada para outro URL.
Então, redirecionarei essa solicitação insegura para https://.
Então eu estou redirecionando essa solicitação para o nome, req.host.
Assim, a solicitação já carregará o nome do host.
Então, porque isso está chegando ao mesmo servidor, então
eu estou redirecionando para o mesmo servidor.
E então vamos dizer +,
; + app.get.
Agora lembre-se de que já tínhamos configurado a porta segura no app.get lá.
Então, vamos dizer app.get SecPort + req.url.
Agora este req.url conterá o resto do caminho
, exceto o nome do host e o número da porta.
Então, se você disser um localhost:3000,
esse localhost:3000 será coberto pela primeira parte e
isso será redirecionado para localhost:3443 por esta configuração aqui.
E, em seguida, o req.url irá conter o caminho real no servidor.
Então, nós apenas adicioná-lo ao caminho de redirecionamento, e
este é o caminho para o qual eu vou redirecionar a mensagem de solicitação de entrada.
Assim que eu redirecionar a mensagem de solicitação recebida
, minha mensagem de solicitação será redirecionada para a porta segura.
E uma última alteração poderia res.redirect,
vamos adicionar o código de status escrito como 307.
307 aqui representa que o recurso de destino reside temporariamente em
URL diferente.
E o agente do usuário não deve alterar o método de solicitação se ele se
reformar no redirecionamento automático para esse URL.
Então, estarei esperando que o agente do usuário tente novamente
com o mesmo método que eles usaram para o ponto final original.
É isso, que a mudança que eu preciso fazer no arquivo app.js.
Então, tendo alterado o app.js, e o www, e
também gerado a chave e o certificado,
agora podemos salvar as alterações, e ir e iniciar nosso servidor.
Indo para o terminal ou a janela de comando, certifique-se de que está de
volta na pasta ConfusionServer e, em seguida, inicie o servidor.
Então eu estou no terminal digitando NPM start.
E seu servidor estará funcionando, e você também percebe que estamos imprimindo
aqui dizendo, Servidor seguro escutando na porta número 3443 aqui.
Para realçar o servidor seguro, acesse um navegador como o Chrome aqui.
E então, deixe-me primeiro acessar o servidor seguro no
localhost: 3443 que é onde meu servidor seguro está sendo executado.
E observe que quando eu tentar o https://localhost3443 no navegador,
ele aparecerá com esta mensagem aqui dizendo, Sua conexão não é privada.
Obviamente, porque o certificado que estamos usando agora
é um certificado auto-assinado.
E isso não é reconhecido pelo Chrome como um certificado válido.
Mas já que sabemos o que estamos fazendo, está tudo bem para nós
aceitarmos que vamos permitir prosseguir para este servidor em particular.
Agora, eu recomendo fortemente que você nunca faça isso em
nenhum site que venha com a sugestão.
Estamos fazendo isso especificamente neste exercício porque
sabemos exatamente onde o servidor está, e
sabemos que nós mesmos configuramos explicitamente o servidor.
Mas se qualquer outro site aparecer com esta mensagem, eu
recomendo fortemente que você não aceite a sugestão e proceda ao acesso ao servidor.
Então você deve voltar para a segurança se você vir este ou em qualquer outro site.
Mas como sabemos que este é o nosso próprio servidor, eu vou prosseguir para
o localhost aqui, e então você veria que estamos acessando o servidor Express.
E você também notaria aqui em cima
que seu navegador está mostrando que você está acessando um servidor inseguro.
Quando você clica nisso, você veria essa mensagem
aqui dizendo que sua conexão com o site não é segura.
Mas sabemos que, uma vez que estamos executando o servidor nós mesmos, isso é bom para fazê-lo.
Então é assim que você estaria acessando o servidor HTTPS.
Agora, deixe-me tentar acessar o mesmo servidor HTTP, mas, deixe-me acessar o,
padrão localhost: 3000.
Este é o lugar onde nosso servidor inseguro está para o servidor HTTP normal está sendo executado.
Então, quando eu tento acessar esse localhost HTTP: 3000,
então você vê imediatamente que meu servidor vai me redirecionar para o servidor seguro.
Desta forma, seu servidor que acabamos de configurar
garantir que você sempre acessará o servidor em sua porta segura.
Isso também garante o fato de que, quando você está trocando,
quando você está enviando suas credenciais, e assim por diante,
toda a troca de credenciais no cabeçalho da mensagem.
E também quando você faz login com a autenticação local, tudo isso é feito de
forma segura em um canal criptografado entre seu cliente e o servidor.
Então, agora, configuramos nosso servidor para ser um servidor HTTPS seguro.
Com isso, completamos este exercício.
Neste exercício, aprendemos como configurar um servidor HTTP seguro ou
usando o protocolo HTTPS.
Com isso, completamos este exercício.
Este é um bom momento para você fazer um git commit com a mensagem, HTTPS.
[ MUSIC]