Zobacz oficjalną wyraźną odpowiedź poniżej autorstwa @Jacob Marble.
clayzermk1
21
Ten przykład już nie działa, ponieważ implementacja HTTPS została ponownie wykonana w Node.JS 0.4. Zobacz odpowiednie dokumenty na nodejs.org. stackoverflow.com/questions/5136353/…
scottyab
10
Ta odpowiedź jest bardzo stara i już nie działa. Proszę zobaczyć odpowiedź pkyeck poniżej lub przejść do: 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);
Miło, właśnie miałem to opublikować. Dziękuję Ci. Dodatkowo uważam, że ten artykuł jest pomocny w generowaniu samopodpisanego certyfikatu.
clayzermk1
1
Upewnij się, że umieściłeś na optionspierwszym miejscu https.createServer, aby uniknąć tajemniczych błędów.
wberry
1
Konfiguruję prawie identyczny port 8888 serwera https i nie jestem pewien, jak zmienić trasy. kiedy uruchamiam curl curl --insecure localhost: 8888 curl: (35) Nieznany błąd protokołu SSL w połączeniu z localhost: 8888 jaki jest błąd przychodzący i jak go obejść. Kiedy wpisuję localhost: 8888 w przeglądarce, zawiesza się i https: / localhost: 8888 podaje błąd SSL
reza
2
@Costa możesz przekierowywać użytkowników z http na https za pomocą express-force-ssl lub ręcznie napisanego oprogramowania pośredniego - to całkiem proste
floatdrop
1
@NathanMcKaskle Możesz wyłączyć hasło: Sprawdź ten przewodnik, ale jeśli używasz systemu macOS, upewnij się, że wygenerowana długość klucza wynosi co najmniej 2048:openssl genrsa -out key.pem 2048
sakisk
87
Znalazłem to pytanie podczas przeglądania „węzła https”, ale przykład w zaakceptowanej odpowiedzi jest bardzo stary - wzięty z dokumentacji aktualnej wersji (v0.10) węzła, powinien wyglądać następująco:
Działa jak urok. Ta informacja przydała się bardzo, gdy uruchomiłem narzędzie node.js (PDFJS) na aplikacji PHP, która została niedawno zmuszona do uruchomienia przez https. Iframe był bardzo niezadowolony z załadowania mojej aplikacji node.js na alternatywny port inny niż https.
lewsid
2
Wygląda to dobrze, ale jak mogę wygenerować wymagane tam pliki ( *.pem)? Próbowałem śledzić tę stronę , ale podczas otwierania localhost:8000w przeglądarce nie otrzymano żadnych danych (tylko ładowanie ...).
Ionică Bizău
7
@ IonicăBizău, aby wygenerować klucze, zainstaluj openssl, a następnie w wierszu polecenia cmd wpiszopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
środę
2
@ IonicăBizău, musisz bezpośrednio przejść do https://localhost:8080. HTTP NIE JEST HTTPS.
Florian Wendelborn,
Czy można utworzyć serwer https z folderem? Możesz więc umieścić w nim plik i uzyskać do niego dostęp, np. Localhost: 81 / main.js
FrenkyB
47
Powyższe odpowiedzi są dobre, ale w przypadku Express i node to będzie działać poprawnie.
Ponieważ ekspresowe tworzenie aplikacji dla Ciebie, pomiń to tutaj.
Zauważyłem, że żadna z tych odpowiedzi nie pokazuje, że dodanie pośredniego głównego urzędu certyfikacji do łańcucha, oto kilka przykładów konfiguracji zerowej, z którymi można się bawić, aby zobaczyć, że:
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);});
Jest to jedna z tych rzeczy, które często są łatwiejsze, jeśli nie próbujesz zrobić tego bezpośrednio przez connect lub express, ale pozwól natywnemu httpsmodułowi to obsłużyć, a następnie użyj tego do obsługi aplikacji connect / express.
Ponadto, jeśli używasz server.on('request', app)zamiast przekazywania aplikacji podczas tworzenia serwera, daje to możliwość przekazania serverinstancji do jakiejś funkcji inicjalizującej, która tworzy aplikację Connect / Express (jeśli chcesz zrobić WebSockets przez SSL na tym samym serwerze, dla przykład).
To miłe wytłumaczenie, ale podany link w sekcji aktualizacji jest zepsuty (daje błąd 500)
Chucky,
8
Aby aplikacja mogła nasłuchiwać zarówno na portach, jak httpi httpsna portach, 80i 443odpowiednio wykonaj następujące czynności
Utwórz aplikację ekspresową:
var express = require('express');var app = express();
Aplikacja zwracana przez express()to funkcja JavaScript. Może być przekazany do serwerów HTTP Node jako callback do obsługi żądań. Ułatwia to dostarczanie wersji aplikacji HTTP i HTTPS przy użyciu tej samej bazy kodu.
Utwórz plik openssl.cnf i pobierz jego zawartość z: http://web.mit.edu/crypto/openssl.cnf
openssl.cnf można umieścić w dowolnym miejscu, ale ścieżka powinna być poprawna, gdy podamy wiersz polecenia.
Otwórz polecenie propmt i ustaw openssl.cnf ścieżka C: \ set OPENSSL_CONF = d: /openssl.cnf 5. Uruchom to w cmd: C: \ openssl-0.9.8r-i386-win32-rev2> openssl.exe
Następnie uruchom OpenSSL> genrsa -des3 -out server.enc.key 1024
Następnie poprosi o podanie fraz: wpisz 4 do 11 znaków jako hasło do certyfikatu
Następnie uruchom to openssl> req -new -key server.enc.key -out server.csr
Następnie poprosi o podanie niektórych szczegółów, takich jak nazwa kodu kraju itp., Wypełnij go swobodnie. 10 Następnie uruchom openssl> rsa -in server.enc.key -out server.key
Uruchom ten OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt, a następnie użyj poprzedniego kodu, który jest na przepełnieniu stosu Dzięki
to jest OT . Pytanie PO jest jasne. Certyfikaty są już wydane.
Martin Schneider,
-6
var path = require('path');var express = require('express');var app = express();var staticPath = path.join(__dirname,'/public');
app.use(express.static(staticPath));
app.listen(8070,function(){
console.log('Server started at port 8070');});
Odpowiedzi:
Znalazłem następujący przykład.
https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/
Działa to dla węzła v0.1.94 - v0.3.1.
server.setSecure()
jest usuwany w nowszych wersjach węzła.Bezpośrednio z tego źródła:
źródło
setSecure
jest przestarzałe. Sprawdź to zamiast tego stackoverflow.com/questions/5136353/node-js-https-secure-errorDokument Express API określa to dość wyraźnie.
Dodatkowo ta odpowiedź zawiera instrukcje tworzenia certyfikatu z podpisem własnym.
Dodałem kilka komentarzy i fragmentu z dokumentacji HTTPS Node.js :
źródło
options
pierwszym miejscuhttps.createServer
, aby uniknąć tajemniczych błędów.openssl genrsa -out key.pem 2048
Znalazłem to pytanie podczas przeglądania „węzła https”, ale przykład w zaakceptowanej odpowiedzi jest bardzo stary - wzięty z dokumentacji aktualnej wersji (v0.10) węzła, powinien wyglądać następująco:
źródło
*.pem
)? Próbowałem śledzić tę stronę , ale podczas otwieranialocalhost:8000
w przeglądarce nie otrzymano żadnych danych (tylko ładowanie ...).openssl
, a następnie w wierszu polecenia cmd wpiszopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP NIE JEST HTTPS.Powyższe odpowiedzi są dobre, ale w przypadku Express i node to będzie działać poprawnie.
Ponieważ ekspresowe tworzenie aplikacji dla Ciebie, pomiń to tutaj.
źródło
module.exports
? Nie ma takiej potrzebyMinimalna konfiguracja serwera HTTPS w Node.js wyglądałaby mniej więcej tak:
Jeśli chcesz również obsługiwać żądania HTTP, musisz wprowadzić tylko małą modyfikację:
źródło
Aktualizacja
Użyj Let's Encrypt poprzez Greenlock.js
Oryginalny post
Zauważyłem, że żadna z tych odpowiedzi nie pokazuje, że dodanie pośredniego głównego urzędu certyfikacji do łańcucha, oto kilka przykładów konfiguracji zerowej, z którymi można się bawić, aby zobaczyć, że:
Skrawek:
Jest to jedna z tych rzeczy, które często są łatwiejsze, jeśli nie próbujesz zrobić tego bezpośrednio przez connect lub express, ale pozwól natywnemu
https
modułowi to obsłużyć, a następnie użyj tego do obsługi aplikacji connect / express.Ponadto, jeśli używasz
server.on('request', app)
zamiast przekazywania aplikacji podczas tworzenia serwera, daje to możliwość przekazaniaserver
instancji do jakiejś funkcji inicjalizującej, która tworzy aplikację Connect / Express (jeśli chcesz zrobić WebSockets przez SSL na tym samym serwerze, dla przykład).źródło
Aby aplikacja mogła nasłuchiwać zarówno na portach, jak
http
ihttps
na portach,80
i443
odpowiednio wykonaj następujące czynnościUtwórz aplikację ekspresową:
Aplikacja zwracana przez
express()
to funkcja JavaScript. Może być przekazany do serwerów HTTP Node jako callback do obsługi żądań. Ułatwia to dostarczanie wersji aplikacji HTTP i HTTPS przy użyciu tej samej bazy kodu.Możesz to zrobić w następujący sposób:
Aby uzyskać szczegółowe informacje, zobacz dokument
źródło
Możesz użyć również zarchiwizować to w ramach Fastify:
(i uruchom,
openssl req -nodes -new -x509 -keyout server.key -out server.cert
aby utworzyć pliki, jeśli chcesz napisać testy)źródło
źródło
źródło