Felizmente para nós, o Node já possui um módulo chamado https:

let https = require("https");// Choose port based on whether we're on loaclhost or production serverconst port = process.env.node_env === 'production' ? 443 : 3000;// Link to generated certificate files// (replace example.com with your own domain name)// (see how to generate them later in this tutorial)const key = `/etc/letsencrypt/live/example.com/privkey.pem`;const cert = `/etc/letsencrypt/live/example.com/fullchain.pem`;const options = {    key: fs.readFileSync(key),    cert: fs.readFileSync(cert)};https.createServer(options, function(request, response) {        /* Your SSL server is running */        /* Of course here... you would write your API implementation */    }).listen(port);

Mas se você estiver executando o Express, nem precisará fazer naquela. O Express simplesmente pega uma matriz de arquivos cert apontando para os certificados que iremos gerar posteriormente neste tutorial. Aqui está um exemplo do Express.js:

let site = 'example.com';let port = 443;const certificates = {    "key": fs.readFileSync(`/etc/letsencrypt/live/${site}/privkey.pem`),    "cert": fs.readFileSync(`/etc/letsencrypt/live/${site}/fullchain.pem`)};const server = event => {    console.log(`${site} is listening on port ${port}!`);};// Launch Node server with Express "app"https.createServer(certificates, app).listen(port, server);

Lembre-se de que toda vez que você adiciona uma nova declaração de exigência ao seu aplicativo, também precisa instalar o pacote associado a ele:

npm install https --save

o –Salve  diretiva adiciona pacote ao seu package.json Arquivo.

Agora podemos usar isso https módulo para iniciar nosso servidor. Mas isso não basta. A parte mais importante é configurar o certificado SSL para que o servidor faça um handshake com autoridade de certificação antes de exibir o conteúdo e um ícone de cadeado seja exibido:

infinite sunset

Ícone de cadeado ativado pôr do sol infinito – meu aplicativo PWA seguro.

Vamos usar LetsEncrypt – é gratuito e fácil de configurar. Ao contrário do openssl LetsEncrypt gera certificados SSL de qualidade de produção isso deve ser suficiente para tudo.

Vamos criptografar

Vamos examinar a configuração de certificados SSL gratuitos em sistemas operacionais baseados em Linux. O sistema operacional preferido para a maioria dos provedores de host da web. No entanto, os comandos descritos nesta seção são os mesmos em terminal e bash.exe no Windows.

Usar LetsEncrypt devemos atualizar pacotes, instalar git (se você ainda não tiver,) clonar e instalar letsencrypt repositório e execute alguns comandos bash.

Por nenhuma razão em particular, eu vou usar bash.exe no Windows 10, mas você pode usar o Terminal no OSX. Primeiro, lançarei o bash.exe no menu Iniciar. A janela da linha de comando é aberta:

letsencrypt bash 1

Vamos entrar no seu host como usuário textbf {root} usando o comando textbf {ssh}. Apenas substitua XX.XXX.XX.XXX com o endereço IP estático no qual você hospeda seu site.

letsencrypt bash 2

Você será solicitado a inserir seu raiz senha do usuário (a menos que você tenha um login sem senha configurado, mas que esteja fora do escopo deste tutorial.)

letsencrypt bash 3

Agora devemos estar logados no host. Veja o log do servidor abaixo:

letsencrypt bash 4

Você será recebido por uma tela semelhante a esta. (Estou executando o Ubuntu 18.)

Para instalar certbot precisamos atualizar os pacotes primeiro. Isso ocorre porque os desenvolvedores do certbot continuam aplicando melhorias e o servidor Ubuntu pode não ter a versão mais recente na instalação inicial do servidor.

Corre sudo add-apt-repository ppa: certbot / certbot comando para adicionar o repositório certbot ao seu servidor Ubuntu:

letsencrypt bash 5

Basta pressionar Entrar e os pacotes mais recentes serão adicionados aos arquivos espelhados, que é uma lista de links que apontam para a versão mais recente dos pacotes.

Agora corra sudo apt-get update realmente baixar os pacotes atualizados:

letsencrypt bash 6

Esta etapa é importante – ele atualizará seus pacotes certbot para a versão mais recente.

Se você estiver em CentOS ou Debian você pode fazer o mesmo da seguinte maneira:

Em CentOS corre atualização do sudo yum && atualização do sudo yum

Em Debian corre sudo apt update && sudo apt upgrade

Linux && Os símbolos farão com que seus pacotes sejam atualizados e depois atualizados, sem a necessidade de executar cada comando separadamente.

Instalando o certbot

Corre apt-get install certbot para instalar certbot pacote. Já estamos logados como root, portanto não há necessidade de usar sudo comando (caso contrário, também prefpend sudo.)

letsencrypt bash 7

pressione Y e bateu Entrar. Ou execute o mesmo comando com -y ou –sim bandeira.

O log de instalação deve rolar na tela e, depois disso, devemos estar prontos!

Instalando o git

Para instalar letsencrypt precisamos clonar a versão mais recente do git. Mas, para fazer isso, primeiro precisamos ter certeza de que temos git instalado em nosso sistema:

letsencrypt bash 12

O processo de instalação rolará na tela …

letsencrypt bash 13

Agora podemos usar git. Se você estiver no Terminal, provavelmente já possui os instaladores de pacotes apto ou apt-get. Lembre-se de que neste exemplo estamos bash.exe no Windows 10. Se sudo ou apt-get não estão funcionando, há uma solução alternativa.

Primeiro … se você estiver hospedando seu servidor remotamente, use ssh no bash.exe para entrar no seu servidor e todos os comandos linux ficarão disponíveis por lá.

Segundo, se você estiver desenvolvendo localhost e não precisa fazer login no seu host remoto, você deve instalar Ubuntu para Windows além de bash.exe. Uma vez instalado, você deve ter apt-get e outros comandos comuns do Linux no Windows 10 bash.

A clonagem letsencrypt

Agora estamos prontos para clonar a versão mais recente do letsencrypt para o nosso servidor. Isso é realizado executando o seguinte comando do Linux:

clone git https://github.com/letsencrypt/letsencrypt / opt / letsencrypt

Basta copiar e colar no seu Terminal ou bash!

letsencrypt bash 11

Você também pode preceder com sudo como mostrado no exemplo a seguir.

letsencrypt bash 14
A clonagem começa …

Criar certificado SSL

Por fim, estamos prontos para criar o SSL certificado que nos permitirá servir arquivos via https ao invés de http. Após as etapas anteriores, digite este comando para navegar para os recém-criados letsencrypt diretório:

cd / opt / letsencrypt

Você navegará até a pasta em que o textbf {letsencrypt} acabou de ser instalado.

CD significa Change Directory no sistema operacional Linux.

letsencrypt bash 15

Depois disso, execute o seguinte comando …

sudo -H ./letsencrypt-auto certonly –standalone -d A.com -d www.A.com

(Só não se esqueça de substituir A.com com o seu nome de domínio.)

letsencrypt bash 16

Inicie a criação do certificado SSL para example.com (Novamente, verifique se ele corresponde ao seu nome de domínio em vez do exemplo.)

Depois disso, você verá letsencrypt-auto comando gerando os arquivos de certificado necessários com certbot e criando automaticamente desafios de http.

Nesta fase, você pode fazer várias perguntas. Não vou incluí-los aqui para economizar espaço no livro. Basta digitar seu endereço de e-mail quando solicitado e algumas outras coisas. Escolher (Aceita ou (Sim opção sempre que solicitado (obrigatório).

Vamos dar uma olhada no que realmente aconteceu depois que o certificado é gerado.

As partes importantes são destacadas:

letsencrypt bash 17

LetsEncrypt desafios http criados e verificados (isso é necessário para verificar se o nome de domínio pertence a você, mas, neste caso, isso é feito automaticamente para nós.) Também gerou dois pem chaves para o nosso example.com domínio.

Parabéns pelo seu domínio SSL seguro!

Neste ponto, seu nome de domínio é https-ativado. Supondo que você tenha passado as duas chaves para o Node ou Express, conforme mostrado no início deste tutorial. Basta reiniciar o servidor e você verá a trava segura na barra de endereços.

Mas há mais uma coisa! Vamos verificar onde os arquivos ficam e se familiarizar com o diretório em que as chaves foram realmente geradas:

letsencrypt bash 18

Os arquivos de certificado foram criados em / etc / letsencrypt / live diretório.

Vamos produzir o conteúdo de viver diretório. Aqui é onde letsencrypt salvou todas as chaves de certificado para todos os nomes de domínio no servidor sob os respectivos nomes de pasta.

letsencrypt bash 19

Corre ls comando para listar o conteúdo do diretório Você verá que nosso site example.com agora tem uma pasta (deve mostrar seu nome de domínio.)

No example.com diretório você encontrará vários pem arquivos gerados pelo letsencrypt. Só precisamos cert.pem e privkey.pem. Estamos prontos para começar a usar o certificado. Tudo o que precisamos fazer é adicionar um novo código ao código existente. index.js Arquivo.

Desafio ACME

Se você concluiu as etapas para instalar o certificado SSL na seção anterior, não precisa executar o próximo passo. Mas, em alguns casos, os desafios do ACME são exigidos por algumas configurações do servidor para verificar se você é o proprietário do nome de domínio.

Corre certbot certonly –manual ou certbot certonly –manual (observe que na verdade é duplo traço, como mostrado abaixo, não um traço.)

letsencrypt bash 8

Se você estiver hospedando vários domínios, poderá usar o mesmo certificado; portanto, especifique quantos nomes de domínio forem separados por espaço ou vírgula. Nesse caso, estamos simplesmente adicionando um site de exemplo awesomesite.com

Digite seu nome de domínio (sem www.) E pressione Entrar.

letsencrypt bash 9

Tipo Y e pressione Entrar para concordar e prosseguir.

letsencrypt bash 10

Para verificar se possuímos o nome de domínio, precisamos criar manualmente o arquivo chamado afBX9EXvQqUqzFooe02-22EfJ5TzcniFw7CvqlaMXCA – apenas a parte antes do ponto (.) destacada em amarelo na captura de tela acima.

Coloque este arquivo no seu .bem conhecido / desafio-acme diretório no seu servidor. (At tA pasta raiz do seu site.) Você pode ter que criar essas pastas primeiro.

Agora edite o conteúdo desse arquivo colando toda a string gerada pelo certbot. No nosso caso, é o texto longo afBX9EXvQqUqzFooe02-22EfJ5TzcniFw7CvqlaMXCA.rX9ThTxJ4y47aLEr7xgEWcOm4v7Jr5kJeT4PLA98-0

Lembre-se de que esse nome de arquivo será gerado toda vez que você executar o certbot. Portanto, se você já executou esse comando antes que ele deva ser alterado novamente.

Pressione Enter para continuar.

Nesse ponto, o certbot verificará a existência do arquivo. Novamente, se você usou o primeiro método nesta seção sem um desafio, você já deve estar pronto.

Adicionando arquivos PEM para ativar o servidor HTTPS

Navegar para /etc/letsencrypt/live/site.com diretório para verificar o pem os arquivos foram realmente gerados pelas etapas realizadas na seção anterior.

Agora que temos privkey.pem e cert.pem gerado, precisamos passá-los para a configuração do servidor Node usando um opções objeto.

Vamos adicionar isso ao nosso código de servidor existente:

https ssl

Apenas substitua site.com com seu nome de domínio real.

Para https conexões é adequado usar porta 443. No entanto, isso não é um requisito – qualquer número de porta permitido ainda funcionará. Seja qual for a porta que você está usando, você também precisa abri-la no seu sistema para começar a funcionar.

Atualize o index.js arquivo com o código acima. Faça login no seu host. Navegue para o diretório raiz do seu aplicativo e execute índice do nó. Se tudo der certo nesse momento, seu servidor estará acessível via protocolo https e a mensagem “Não Seguro” no Chrome (e alguns outros navegadores) deve desaparecer.

Mas há mais uma coisa …

Um ponto de tropeço comum

UMA cadeia de certificados é a lista de certificados que contém certificado SSL, autoridades de certificação intermediárias e autoridade de certificação raiz que permitem que o dispositivo de conexão verifique se o certificado SSL é confiável Esta é uma etapa necessária para servidores de produção.

Neste ponto, seu https site será aberto no Chrome e IE sem problemas! Mas se você abrir no Firefox, você ainda pode veja o ícone de cadeado. Raposa de fogo (entre muitos outros programas) depende da verificação da cadeia de certificados.

Para configurar corretamente um certificado, você precisa configurar cadeia de certificados não apenas uma chave. O Chrome e o IE negligenciam graciosamente esses detalhes e mostram as conexões como seguras.

Se você não vincular à cadeia de certificados, não poderá validar com êxito seu https conexão. Isso pode interferir em coisas como adicionar cartões do Twitter ao seu site (porque cartões do Twitter com imagens armazenadas em um https endereço exige verificação da cadeia) ao procurar a imagem do seu cartão por meio de metatags do Twitter.

E esse é apenas um exemplo. Muitos problemas podem surgir se você não vincular à cadeia de certificados. Felizmente para nós, a solução é simples. Nas etapas anteriores, vamos Criptografar já gerado fullchain.pem arquivo no mesmo diretório com cert.pem.

Tudo o que temos que fazer mudar cert.pem para fullchain.pem no exemplo de código-fonte anterior, como a seguir.

Mude a seguinte linha:

const cert = /etc/letsencrypt/live/site.com/cert.pem;

Para:

const cert = /etc/letsencrypt/live/site.com/fullchain.pem;

Reinicie seu servidor Node com nó index.js e você deve ter um certificado SSL instalado e funcionando corretamente!