Veja a resposta oficial oficial abaixo por @Jacob Marble.
precisa saber é o seguinte
21
Este exemplo não funciona mais, pois a implementação HTTPS foi refeita no Node.JS 0.4. Veja os documentos correspondentes em nodejs.org. stackoverflow.com/questions/5136353/...
scottyab
11
Esta resposta é muito antiga e não funciona mais. Por favor, veja a resposta por pkyeck abaixo, ou visite: nodejs.org/api/https.html
var express = require('express');var https = require('https');var http = require('http');var fs = require('fs');// This line is from the Node.js HTTPS documentation.var options ={
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')};// Create a service (the app object is just a callback).var app = express();// Create an HTTP service.
http.createServer(app).listen(80);// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);
Bom, estava prestes a publicar isso sozinho. Obrigado. Além disso, achei este artigo útil para gerar um certificado autoassinado.
precisa saber é o seguinte
11
Certifique-se de colocar optionsprimeiro https.createServer, para evitar erros enigmáticos.
26513 wberry
11
Estou configurando uma porta 8888 do servidor https quase idêntica e não sei como alterar as rotas. quando executo curl curl - localhost seguro : 8888 curl: (35) Erro desconhecido no protocolo SSL em conexão com o localhost: 8888 de que erro vem e como contorná-lo. Quando digito localhost: 8888 no navegador, ele trava e https: / localhost: 8888 fornece erro SSL
@NathanMcKaskle Você pode desativar a senha: Verifique este guia, mas se você estiver usando o macOS, verifique se o comprimento da chave gerada é pelo menos 2048:openssl genrsa -out key.pem 2048
sakisk
87
Encontrei essa pergunta ao pesquisar no "nó https", mas o exemplo na resposta aceita é muito antigo - extraído dos documentos da versão atual (v0.10) do nó, ele deve se parecer com o seguinte:
Funcionou como um encanto. Essas informações foram muito úteis, pois eu executo uma ferramenta node.js (PDFJS) em cima de um aplicativo PHP que foi recentemente forçado a executar sobre https. O iframe ficou muito infeliz ao carregar meu aplicativo node.js em uma porta alternativa não https.
Lewsid 7/10
2
Parece bom, mas como posso gerar os arquivos necessários lá ( *.pem)? Tentei seguir esta página , mas ao abrir localhost:8000no navegador, nenhum dado é recebido (apenas carregando ...).
Bizonic
7
@ IonicăBizău, para a geração de chaves, instalação openssl, em seguida, em cmd prompt, digiteopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
mido
2
@ IonicăBizău você precisa ir diretamente para https://localhost:8080. HTTP NÃO é HTTPS.
Florian Wendelborn
É possível criar um servidor https com pasta? Então você pode colocar o arquivo nele e acessá-lo como localhost: 81 / main.js
FrenkyB 20/19/19
47
As respostas acima são boas, mas com o Express e o nó isso funcionará bem.
Como o Express cria o aplicativo para você, eu vou pular isso aqui.
Percebi que nenhuma dessas respostas mostra que, ao adicionar uma CA raiz intermediária à cadeia, aqui estão alguns exemplos de configuração zero para brincar:
var options ={// this is the private key only
key: fs.readFileSync(path.join('certs','my-server.key.pem'))// this must be the fullchain (cert + intermediates), cert: fs.readFileSync(path.join('certs','my-server.crt.pem'))// this stuff is generally only for peer certificates//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]//, requestCert: false};var server = https.createServer(options);var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443,function(){
console.log("Listening on "+ server.address().address +":"+ server.address().port);});var insecureServer = http.createServer();
server.listen(80,function(){
console.log("Listening on "+ server.address().address +":"+ server.address().port);});
Essa é uma das coisas que geralmente é mais fácil se você não tentar fazê-lo diretamente por meio de conexão ou expressão, mas deixe o nativohttps módulo lidar com isso e use-o para atendê-lo ao aplicativo connect / express.
Além disso, se você usar, em server.on('request', app)vez de passar o aplicativo ao criar o servidor, você terá a oportunidade de passar a serverinstância para alguma função inicializadora que cria o aplicativo connect / express (se você deseja fazer websockets sobre SSL no mesmo servidor, por exemplo).
Esta é uma explicação bom, mas, no link fornecido na seção de atualização, é quebrada (dá erro 500)
Chucky
8
Para permitir que seu aplicativo escute ambas httpe httpsnas portas 80e 443respectivamente, faça o seguinte
Crie um aplicativo expresso:
var express = require('express');var app = express();
O aplicativo retornado por express()é uma função JavaScript. Pode ser passado para os servidores HTTP do Node como um retorno de chamada para manipular solicitações. Isso facilita o fornecimento das versões HTTP e HTTPS do seu aplicativo usando a mesma base de código.
Crie o arquivo openssl.cnf e faça o download do conteúdo em: http://web.mit.edu/crypto/openssl.cnf
openssl.cnf pode ser colocado em qualquer lugar, mas o caminho deve estar correto quando for solicitado no prompt de comando.
Abra o comando propmt e defina o caminho openssl.cnf C: \ set OPENSSL_CONF = d: /openssl.cnf 5. Execute isso no cmd: C: \ openssl-0.9.8r-i386-win32-rev2> openssl.exe
Em seguida, execute o OpenSSL> genrsa -des3 -out server.enc.key 1024
Em seguida, ele solicitará frases secretas: digite 4 a 11 caracteres como sua senha para o certificado
Em seguida, execute o arquivo Openssl> req -new -key server.enc.key -out server.csr
Em seguida, solicitará alguns detalhes, como o nome do estado do código do país, etc. preencha-o livremente. 10) Em seguida, execute Openssl> rsa -in server.enc.key -out server.key
Execute este OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt e use o código anterior que está no estouro da pilha
Respostas:
Eu encontrei o seguinte exemplo.
https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/
Isso funciona para o nó v0.1.94 - v0.3.1.
server.setSecure()
é removido nas versões mais recentes do nó.Diretamente dessa fonte:
fonte
setSecure
está obsoleto. Em vez disso, stackoverflow.com/questions/5136353/node-js-https-secure-errorO documento da API Express explica isso claramente.
Além disso, esta resposta fornece as etapas para criar um certificado autoassinado.
Eu adicionei alguns comentários e um trecho do Node.js HTTPS documentação :
fonte
options
primeirohttps.createServer
, para evitar erros enigmáticos.openssl genrsa -out key.pem 2048
Encontrei essa pergunta ao pesquisar no "nó https", mas o exemplo na resposta aceita é muito antigo - extraído dos documentos da versão atual (v0.10) do nó, ele deve se parecer com o seguinte:
fonte
*.pem
)? Tentei seguir esta página , mas ao abrirlocalhost:8000
no navegador, nenhum dado é recebido (apenas carregando ...).openssl
, em seguida, em cmd prompt, digiteopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP NÃO é HTTPS.As respostas acima são boas, mas com o Express e o nó isso funcionará bem.
Como o Express cria o aplicativo para você, eu vou pular isso aqui.
fonte
module.exports
? Não há necessidade dissoA configuração mínima para um servidor HTTPS no Node.js seria algo como isto:
Se você também deseja dar suporte a solicitações http, é necessário fazer apenas esta pequena modificação:
fonte
Atualizar
Use o Let's Encrypt via Greenlock.js
Correio Original
Percebi que nenhuma dessas respostas mostra que, ao adicionar uma CA raiz intermediária à cadeia, aqui estão alguns exemplos de configuração zero para brincar:
Snippet:
Essa é uma das coisas que geralmente é mais fácil se você não tentar fazê-lo diretamente por meio de conexão ou expressão, mas deixe o nativo
https
módulo lidar com isso e use-o para atendê-lo ao aplicativo connect / express.Além disso, se você usar, em
server.on('request', app)
vez de passar o aplicativo ao criar o servidor, você terá a oportunidade de passar aserver
instância para alguma função inicializadora que cria o aplicativo connect / express (se você deseja fazer websockets sobre SSL no mesmo servidor, por exemplo).fonte
Para permitir que seu aplicativo escute ambas
http
ehttps
nas portas80
e443
respectivamente, faça o seguinteCrie um aplicativo expresso:
O aplicativo retornado por
express()
é uma função JavaScript. Pode ser passado para os servidores HTTP do Node como um retorno de chamada para manipular solicitações. Isso facilita o fornecimento das versões HTTP e HTTPS do seu aplicativo usando a mesma base de código.Você pode fazer o seguinte:
Para detalhes completos, consulte o documento
fonte
Você também pode usar isso para arquivar isso com a estrutura Fastify:
(e execute
openssl req -nodes -new -x509 -keyout server.key -out server.cert
para criar os arquivos, se você precisar escrever testes)fonte
fonte